web-dev-qa-db-ja.com

start-stop-daemonを使用してLSBinitスクリプトからPHPデーモンを起動する

自分自身をデーモン化するphpスクリプトを起動するlsbinitスクリプト(確かに最初から行ったことのないもの)を書いています。 phpスクリプトは次のように始まります。

#!/usr/bin/env php
<?php
/* do some stuff */

その後、initスクリプトで次のように開始されます。

# 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に依存してデタッチするのではなく、デーモン自体としてデタッチして実行されます。

これは、initスクリプトで停止する(試行する)方法です。

start-stop-daemon --stop --oknodo --exec /path/to/executable/php-script.php \
  --pidfile $PIDFILE

問題は、initスクリプトを介して停止しようとすると、次のようになります。

$ 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ファイルも生成されていますが、無視してプロセス名でfind + 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

私はここで何かを完全に誤解していますか?または、これを回避する簡単な方法はありますか?

6
EvanK

正しい停止:

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