Ubuntu

如何通過 upstart 啟動 nginx?

  • August 26, 2013

背景:

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

參考:

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