如何通過 upstart 啟動 nginx?
背景:
DISTRIB_ID=Ubuntu DISTRIB_RELEASE=10.04 DISTRIB_CODENAME=lucid DISTRIB_DESCRIPTION="Ubuntu 10.04 LTS"
我已經建構了 nginx,我想使用 upstart 來啟動它:
來自該站點的 nginx upstart 腳本:
description "nginx http daemon" start on runlevel 2 stop on runlevel 0 stop on runlevel 1 stop on runlevel 6 console owner exec /usr/sbin/nginx -c /etc/nginx/nginx.conf -g "daemon off;" respawn
當我嘗試使用 initctl 執行它時,我得到“未知的工作”,我剛剛了解到這顯然意味著有一個錯誤,(用“錯誤”來描述錯誤有什麼問題?)
有人能指出我正確的方向嗎?我已經按原樣閱讀了文件,對於 SysV init 替換來說似乎有點稀疏……但是只要將這個工作添加到列表中,執行它,然後繼續我的生活。 .. 有小費嗎?
編輯:initctl 版本初始化(新貴 0.6.5)
對於 Upstart >= 0.5,您不能
stop on
在 upstart 職位描述中包含多個指令。並且
console owner
可能不是您想要的(這使得 nginx 成為系統控制台的所有者)。嘗試:
description "nginx http daemon" start on runlevel 2 stop on runlevel [016] console output exec /usr/sbin/nginx -c /etc/nginx/nginx.conf -g "daemon off;" respawn
我不止一次來到這裡,所以我想在使用這裡的答案後,我會根據自己的經驗提供一個更新的答案。特別感謝@danorton 和@orj 的回答。
此腳本已在 Upstart 1.5 上進行了測試,該版本在 Ubuntu 12.04 上執行,帶有 Nginx 1.0.11 和Passenger 3.0.11。如果您不使用Passenger,則可能需要使用該
post-stop
線路。請參閱新貴食譜。在空白處
/etc/init/nginx.conf
添加以下行(如果您願意,可以刪除評論):description "nginx http daemon" start on (filesystem and net-device-up IFACE=lo) stop on runlevel [!2345] env DAEMON=/usr/local/nginx/sbin/nginx env PIDFILE=/var/run/nginx.pid # Needed to allow Nginx to start, however, the wrong PID will be tracked expect fork # Test the nginx configuration (Upstart will not proceed if this fails) pre-start exec $DAEMON -t # Ensure nginx is shutdown gracefully # Upstart will be tracking the wrong PID so the following is needed to stop nginx post-stop exec start-stop-daemon --stop --pidfile $PIDFILE --name nginx --exec $DAEMON --signal QUIT # Start Nginx exec $DAEMON
我從 Nginx Wiki 中獲取了 Upstart 腳本並對其進行了調整,因為不需要多行,導致混亂或不起作用。
您可能需要根據安裝 nginx 的位置和正在寫入 PID 的位置更改
env DAEMON
和行。env PID
可以在 nginx 中配置 PID。我嘗試了所有形式的
expect
. 只是expect fork
似乎有效。使用Passenger nginx 創建61 個分叉。Upstart 需要 0、1 或 2。正如其他人所暗示的,Upstart 將跟踪錯誤的 PID。我也刪除respawn
了,因為它可能因為同樣的原因什麼也沒做。一些額外的 pre/post-start 腳本可以通過獲取真實的 PID 來解決這個問題。但是,我使用 monit 來處理重新啟動,所以不需要它。不要使用
daemon off
. 這僅用於開發。見http://wiki.nginx.org/CoreModule#daemon參考: