나는 여기에 두 번 이상 끝났으므로 여기에 답변을 사용한 후 내 경험에 따라 업데이트 된 답변을 제공 할 것이라고 생각했습니다. 그들의 답변에 대해 @danorton과 @orj에게 특히 감사합니다.
이 스크립트는 Nginx 1.0.11 및 Passenger 3.0.11과 함께 Ubuntu 12.04에서 실행되는 Upstart 1.5에서 테스트되었습니다. 승객을 사용하지 않는 경우 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 스크립트를 가져 와서 여러 줄이 필요하지 않거나 혼란을 일으키거나 작동하지 않기 때문에 조정했습니다.
nginx를 설치하고 PID를 작성하는 위치에 따라 env DAEMON
및 env PID
행 을 변경해야 할 수도 있습니다 . PID는 nginx에서 구성 할 수 있습니다.
나는 모든 형태의 시도했다 expect
. 만 expect fork
작동하는 것 같다. 승객 nginx와 함께 61 포크를 만듭니다. Upstart에는 0, 1 또는 2가 필요합니다. 다른 사람들이 암시했듯이 Upstart는 잘못된 PID를 추적합니다. 나는 또한 respawn
같은 이유로 아마도 아무것도하지 않기 때문에 제거 했습니다. 일부 추가 사전 / 사후 시작 스크립트는 실제 PID를 잡아서이를 수정할 수 있습니다. 그러나 monit을 사용하여 재시작을 처리하므로 필요하지 않습니다.
사용하지 마십시오 daemon off
. 이것은 개발 전용입니다. http://wiki.nginx.org/CoreModule#daemon을 참조 하십시오
참고 문헌 :