私はここに何度も行ったことがあるので、ここの回答を使用した後、自分の経験に基づいて更新された回答を提供したいと思いました。特に@danortonと@orjの回答に感謝します。
このスクリプトは、Nginx 1.0.11およびPassenger 3.0.11を搭載したUbuntu 12.04で実行されるUpstart 1.5でテストされています。Passengerを使用していない場合は、post-stop
ラインをいじる必要があるかもしれません。Upstartクックブックを参照してください。
空/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スクリプトを取り出し、微調整を行いました。必要な行がなく、混乱を引き起こしたり、機能しなかったりするためです。
あなたは変更する必要があるかもしれませんenv DAEMON
し、env PID
あなたがnginxのインストールされているとPIDを記述している場所に応じてライン。PIDはnginxで設定できます。
私はすべての形を試しましたexpect
。のみ動作するexpect fork
ようです。Passengerでnginxは61のフォークを作成します。Upstartには0、1、または2が必要です。他の人が示唆したように、Upstartは間違ったPIDを追跡します。respawn
同じ理由でおそらく何もしないので、私も削除しました。いくつかの追加の開始前/後開始スクリプトは、実際のPIDを取得することで修正できる場合があります。ただし、私は再起動の処理にmonitを使用しているため、再起動は必要ありません。
使用しないでくださいdaemon off
。これは開発専用です。http://wiki.nginx.org/CoreModule#daemonを参照してください
参照: