Acabei aqui mais de uma vez, por isso pensei em fornecer uma resposta atualizada com base na minha própria experiência depois de usar as respostas aqui. Obrigado especialmente a @danorton e @orj por suas respostas.
Este script foi testado no Upstart 1.5 rodando 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 linha post-stop
. Consulte o livro de receitas do Upstart.
Em um /etc/init/nginx.conf
vazio, 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
Eu peguei o script Upstart do Nginx Wiki e ajustei-o como um número de linhas que 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 Passenger, o nginx cria 61 garfos. Upstart requer 0, 1 ou 2. Como os outros sugeriram, o Upstart estará rastreando o PID errado. Eu também removi respawn
, pois não faz nada provavelmente pelo mesmo motivo. Algum script adicional de pré / pós-inicialização pode consertar isso pegando o PID real. Eu, no entanto, uso o monit para manipular reinicializações, então não é necessário.
Não use daemon off
. Isto é apenas para desenvolvimento. Veja link
Referências: