start-stop-daemon 不會將我的 Python 腳本作為服務啟動
我正在嘗試在我的 Debian 機器上執行 Google AppEngine,我創建了一個文件
init.d/gae
:. /lib/lsb/init-functions # # Initialize variables # name=gae user=$name pid=/var/run/$name.pid prog="python /opt/google_appengine/dev_appserver.py --host=0.0.0.0 --admin_host=0.0.0.0 --php_executable_path=/usr/bin/php-cgi /var/www" case "${1}" in start) echo "Starting...Google App Engine" start-stop-daemon --start --make-pidfile --background --oknodo --user "$user" --name "$name" --pidfile "$pid" --startas "$prog" ;; stop) echo "Stopping...Google App Engine" ;; restart) ${0} stop sleep 1 ${0} start ;; *) echo "Usage: ${0} {start|stop|restart}" exit 1 ;; esac exit 0 # End scriptname
我正在通過手動呼叫來測試腳本,並且腳本執行但不是作為守護程序執行,或者至少它不會與終端分離。我期待/尋找與 Apache 類似的功能。
我錯過了什麼開關?
編輯
我應該注意,儘管開關指示應該創建它,但沒有寫入或創建 PID 文件
我可以看到您有兩個問題:
prog=python /opt/google_appengine/dev_appserver.py –host=0.0.0.0 –admin_host=0.0.0.0 –php_executable_path=/usr/bin/php-cgi /var/www
將從環境
/opt/google_appengine/dev_appserver.py
開始prog=python
。這是在你的start
塊之前,所以start-stop-daemon
甚至沒有參與。快速解決方法是像這樣引用整個作業:
prog=‘python /opt/google_appengine/dev_appserver.py –host=0.0.0.0 –admin_host=0.0.0.0 –php_executable_path=/usr/bin/php-cgi /var/www’
但更好的解決方法是使用來自
/etc/init.d/skeleton
, 的樣式並執行DAEMON='python /opt/google/appengine/dev_appserver.py' DAEMON_ARGS='--host=0.0.0.0 --admin_host=0.0.0.0 --php_executable_path=/usr/bin/php-cgi /var/www'
第二個問題是您錯誤地引用了
$prog
.啟動-停止-守護程序 –start –make-pidfile –background –oknodo –user " $ user" –name " $ 名稱“–pidfile” $ pid" –startas " $ 編”
告訴
start-stop-daemon
嘗試啟動一個名為python /opt/google_appengine/dev_appserver.py --host=0.0.0.0 --admin_host=0.0.0.0 --php_executable_path=/usr/bin/php-cgi /var/www
.但很明顯,沒有這樣的程序。你想從
python
爭論開始。刪除雙引號是一種快速修復,但更好的/etc/init.d/skeleton
方法是啟動-停止-守護程序 –start –quiet –chuid $ CHUID –pidfile $ PIDFILE –exec $ DAEMON – $ DAEMON_ARGS