Попробуйте использовать start-stop-daemon(8)
с аргументом --pidfile
в вашем скрипте инициализации. Пусть ваша программа записывает свой PID в указанное место (обычно это определяется в файле конфигурации).
Вам нужно обратить внимание на устаревшие PID-файлы, например, если файл блокировки сохранялся после перезагрузки. Эта логика лучше всего реализована в самом скрипте инициализации, поэтому опция --exec
для start-stop-daemon
.
Например, если /var/run/foo.pid
равно 1234
, а /proc/1234/exe
не является вашим сервисом, файл блокировки устарел и должен быть тихо удален, что позволяет сервису нормально запускаться.
Что касается вашего приложения, просто убедитесь, что местоположение файла блокировки является настраиваемым, и существуют некоторые средства, чтобы сообщить сценарию инициализации, куда его поместить.
Например: (пример: / etc / default / foo):
PIDFILE=/var/run/foo.pid
OTHEROPTION=foo
Затем в /etc/init.d/foo:
[ -f /etc/default/foo ] && . /etc/default/foo
Опять же, кроме последовательной записи в файл, вся эта логика должна обрабатываться вне вашего приложения.