Запуск демона PHP из сценария инициализации LSB с помощью start-stop-daemon
Я пишу сценарий инициализации lsb (по общему признанию, то, чего я никогда не делал с нуля), который запускает сценарий php, который демонизирует себя. PHP-скрипт начинается примерно так:
#!/usr/bin/env php
<?php
/* do some stuff */
Затем он запускается так в сценарии инициализации:
# first line is args to start-stop-daemon, second line is args to php-script
start-stop-daemon --start --exec /path/to/executable/php-script.php \
-- --daemon --pid-file=$PIDFILE --other-php-script-args
--daemon
флаг заставляет скрипт php отключаться и запускаться как сам демон, а не полагаться на start-stop-daemon
отделить это.
Вот как он (пытается) остановить это в скрипте инициализации:
start-stop-daemon --stop --oknodo --exec /path/to/executable/php-script.php \
--pidfile $PIDFILE
Проблема в том, что когда я пытаюсь остановиться через скрипт инициализации, он дает мне следующее:
$ sudo /etc/init.d/my-lsb-init-script stop
* Stopping My Project
No /path/to/executable/php-script.php found running; none killed.
...done.
Быстрый взгляд на ps
говорит мне, что, хотя сам скрипт php является исполняемым, он работает как php <script>
а не само имя скрипта, которое не дает старт-стоп-демону его увидеть. Файл PID даже создается, но он, кажется, игнорирует его и вместо этого пытается найти +kill по имени процесса.
$ ps ax | grep '/path/to/executable/php-script.php'
2505 pts/1 S 0:01 php /path/to/executable/php-script.php --daemon --pid-file /var/run/blah/blah.pid --other-php-script-args
2507 pts/1 S 0:00 php /path/to/executable/php-script.php --daemon --pid-file /var/run/blah/blah.pid --other-php-script-args
2508 pts/1 S 0:00 php /path/to/executable/php-script.php --daemon --pid-file /var/run/blah/blah.pid --other-php-script-args
2509 pts/1 S 0:00 php /path/to/executable/php-script.php --daemon --pid-file /var/run/blah/blah.pid --other-php-script-args
2518 pts/1 S 0:01 php /path/to/executable/php-script.php --daemon --pid-file /var/run/blah/blah.pid --other-php-script-args
$ cat /var/run/blah/blah.pid
2518
Я совершенно не понимаю что-то здесь? Или есть простой способ обойти это?
1 ответ
Правильная остановка:
start-stop-daemon --stop --oknodo --pidfile $PIDFILE