Tôi đã kết thúc ở đây hơn một lần nên tôi nghĩ tôi sẽ cung cấp câu trả lời cập nhật dựa trên kinh nghiệm của bản thân sau khi sử dụng câu trả lời ở đây. Đặc biệt cảm ơn @danorton và @orj vì câu trả lời của họ.
Kịch bản này đã được thử nghiệm trên Upstart 1.5 chạy trên Ubuntu 12.04 với Nginx 1.0.11 và Hành khách 3.0.11. Nếu bạn không sử dụng Hành khách, bạn có thể cần chơi xung quanh với post-stop
tuyến. Tham khảo sách dạy nấu ăn Upstart.
Trong phần trống, /etc/init/nginx.conf
thêm các dòng sau (Bạn có thể xóa các nhận xét nếu bạn muốn):
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
Tôi đã lấy tập lệnh Upstart từ Nginx Wiki và điều chỉnh nó vì một số dòng không cần thiết, gây nhầm lẫn hoặc không hoạt động.
Bạn có thể cần phải thay đổi env DAEMON
và env PID
các dòng tùy thuộc vào nơi bạn đã cài đặt nginx và đang viết PID. PID có thể được cấu hình bằng nginx.
Tôi đã thử tất cả các hình thức expect
. Chỉ có expect fork
vẻ để làm việc. Với Hành khách nginx tạo ra 61 dĩa. Upstart yêu cầu 0, 1 hoặc 2. Như những người khác đã gợi ý, Upstart sẽ theo dõi sai PID. Tôi cũng đã gỡ bỏ respawn
vì nó không có gì vì lý do tương tự. Một số tập lệnh trước / sau khi bắt đầu bổ sung có thể có thể khắc phục điều đó bằng cách lấy PID thực sự. Tôi, tuy nhiên, sử dụng monit để xử lý khởi động lại vì vậy không cần nó.
Không sử dụng daemon off
. Điều này chỉ dành cho phát triển. Xem http://wiki.nginx.org/CoreModule#daemon
Người giới thiệu: