Php

從帶有 start-stop-daemon 的 LSB 初始化腳本啟動 PHP 守護程序

  • December 19, 2012

我正在編寫一個 lsb init 腳本(誠然,這是我從未從頭開始做過的事情),它啟動了一個 php 腳本,它自己守護程序。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分離它。

這就是它(試圖)在初始化腳本中停止它的方式:

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文件甚至正在生成,但它似乎忽略它並嘗試通過程序名稱查找+殺死。

$ 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

引用自:https://serverfault.com/questions/229759