Блокировка файла для проверки отдельного выполнения службы. Насколько надежны? - PullRequest
2 голосов
/ 05 мая 2010

Я развертываю небольшой сервис в системе UNIX (AIX). Я хочу проверить, нет ли активного экземпляра этой службы, запущенной при его запуске. Насколько надежна такая проверка?

  1. Попробуйте установить блокировку файла (w / FileChannel)
  2. Если получится, сохраните блокировку и продолжите выполнение
  3. Если не получится, выйдите и откажитесь запустить основной корпус

Мне известно о программном обеспечении, подобном оболочке Tanuki, однако я жажду более простого (возможно, не переносимого) решения.


РЕДАКТИРОВАТЬ: Относительно PIDFILE (ов): Я хочу по возможности избегать их использования, так как у меня нет прав администратора на машине, нет знаний в программировании оболочки AIX.

Ответы [ 3 ]

3 голосов
/ 05 мая 2010

Традиционно в системах Unix это делается путем создания файла /var/run/nameofservice.pid. При запуске вы проверяете, существует ли такой файл, если нет, создаете его и продолжаете. Затем, когда служба закрыта, файл pid удаляется.

Как видно из названия, содержимое этого файла является PID службы. Это допускает форму восстановления после ошибок, когда сервис запускается и обнаруживает, что файл PID существует, а не просто завершается, он может проверить, действительно ли существует процесс с этим PID, и если нет, то это означает, что демон сервиса произошел сбой, запустите и попробуйте восстановить систему после предыдущего сбоя.

3 голосов
/ 05 мая 2010

Альтернативой может быть привязка к определенному порту на сервере с использованием ServerSocket, если порт используется, то ваша служба уже запущена:

int port = 12345;

try { 
    java.net.ServerSocket ss = new java.net.ServerSocket(port); 
} catch (java.net.BindException ex) { 
    System.err.println("service is already running and bound to port "+port);
    System.exit(1);
} 

Преимущество этого подхода в том, что он прекрасно работает практически на любой платформе.

0 голосов
/ 05 мая 2010

Почему бы не использовать pidfile? http://www.linux.com/archive/feed/46892

Проверьте, существует ли файл. Если так, предупредите пользователя и выйдите немедленно. В противном случае создайте этот файл и продолжайте работу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...