从带有 start-stop-daemon 的 LSB init 脚本启动 PHP 守护进程

Eva*_*anK 6 php bash daemon lsb init.d

我正在编写一个 lsb init 脚本(不可否认,我从未从头开始做过)它启动了一个守护进程的 php 脚本。php 脚本是这样开始的:

#!/usr/bin/env php
<?php
/* do some stuff */
Run Code Online (Sandbox Code Playgroud)

然后在 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
Run Code Online (Sandbox Code Playgroud)

--daemon标志导致 php 脚本分离并作为守护程序本身运行,而不是依赖于start-stop-daemon分离它。

这就是它(试图)在 init 脚本中停止它的方式:

start-stop-daemon --stop --oknodo --exec /path/to/executable/php-script.php \
  --pidfile $PIDFILE
Run Code Online (Sandbox Code Playgroud)

问题是,当我尝试通过 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.
Run Code Online (Sandbox Code Playgroud)

快速浏览一下ps告诉我,尽管 php 脚本本身是可执行的,但它的运行方式php <script>而不是脚本名称本身,这使得 start-stop-daemon 无法看到它。PID 文件甚至正在生成,但它似乎忽略它并尝试按进程名称查找+终止。

$ 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
Run Code Online (Sandbox Code Playgroud)

我在这里完全误解了什么吗?或者有没有简单的方法来解决这个问题?

alv*_*osu 7

正确的停止:

start-stop-daemon --stop --oknodo --pidfile $PIDFILE
Run Code Online (Sandbox Code Playgroud)