ฉันลงเอยที่นี่มากกว่าหนึ่งครั้งดังนั้นฉันคิดว่าฉันจะให้คำตอบที่อัปเดตตามประสบการณ์ของตัวเองหลังจากใช้คำตอบที่นี่ ขอบคุณโดยเฉพาะ @danorton และ @orj สำหรับคำตอบของพวกเขา
สคริปต์นี้ได้รับการทดสอบใน Upstart 1.5 ที่ทำงานบน Ubuntu 12.04 ด้วย Nginx 1.0.11 และ Passenger 3.0.11 หากคุณไม่ได้ใช้งานผู้โดยสารคุณอาจต้องเล่นกับ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 และ tweaked เป็นจำนวนบรรทัดที่ไม่จำเป็นทำให้เกิดความสับสนหรือไม่ทำงาน
คุณอาจต้องแก้ไขenv DAEMON
และenv PID
บรรทัดขึ้นอยู่กับตำแหน่งที่คุณติดตั้ง nginx และกำลังเขียน PID PID สามารถกำหนดค่าใน nginx
expect
ฉันพยายามทุกรูปแบบของ เพียง แต่expect fork
ดูเหมือนว่าจะทำงาน ด้วย Passenger nginx สร้าง 61 ส้อม การพุ่งพรวดต้องใช้ 0, 1 หรือ 2 ตามที่คนอื่นบอกใบ้การพุ่งพรวดจะติดตาม PID ที่ไม่ถูกต้อง ฉันได้ลบออกrespawn
เพราะไม่ได้ทำอะไรเพราะเหตุผลเดียวกัน สคริปต์ pre / post-start เพิ่มเติมบางอย่างอาจสามารถแก้ไขได้โดยการคว้า PID จริง อย่างไรก็ตามฉันใช้ monit เพื่อจัดการการรีสตาร์ทดังนั้นไม่จำเป็นต้องใช้
daemon off
อย่าใช้ เพื่อการพัฒนาเท่านั้น ดูhttp://wiki.nginx.org/CoreModule#daemon
อ้างอิง: