Назад | Перейти на главную страницу

Запуск демона 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> а не само имя сценария, которое не позволяет демону start-stop-daemon его увидеть. Файл 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

Я что-то совершенно не понимаю? Или есть простой способ обойти это?

Правильная остановка:

start-stop-daemon --stop --oknodo --pidfile $PIDFILE