Acabei aqui mais de uma vez, então pensei em fornecer uma resposta atualizada com base em minha própria experiência depois de usar as respostas aqui. Agradecemos especialmente a @danorton e @orj por suas respostas.
Este script foi testado no Upstart 1.5 em execução no Ubuntu 12.04 com Nginx 1.0.11 e Passenger 3.0.11. Se você não estiver usando o Passenger, talvez seja necessário brincar com a post-stop
linha. Consulte o livro de receitas Upstart.
Em um vazio, /etc/init/nginx.conf
adicione as seguintes linhas (você pode remover os comentários, se quiser):
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
Peguei o script Upstart do Nginx Wiki e o aprimorei, pois várias linhas não são necessárias, causam confusão ou não funcionam.
Você pode precisar alterar env DAEMON
e env PID
linhas, dependendo de onde você instalou o nginx e está escrevendo o PID. O PID pode ser configurado em nginx.
Eu tentei todas as formas de expect
. Apenas expect fork
parece funcionar. Com o Passageiro, o nginx cria 61 garfos. O Upstart requer 0, 1 ou 2. Como outros sugeriram, o Upstart rastreará o PID errado. Também removi, respawn
pois não faz nada provavelmente por causa do mesmo motivo. Algum script adicional pré / pós-inicialização pode consertar isso pegando o PID real. No entanto, eu uso o monit para manipular as reinicializações, para que não seja necessário.
Não use daemon off
. Isso é apenas para desenvolvimento. Consulte http://wiki.nginx.org/CoreModule#daemon
Referências: