Fundo:
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=10.04
DISTRIB_CODENAME=lucid
DISTRIB_DESCRIPTION="Ubuntu 10.04 LTS"
Criei o nginx e gostaria de usar o upstart para iniciá-lo:
script inicial do nginx no site:
description "nginx http daemon"
start on runlevel 2
stop on runlevel 0
stop on runlevel 1
stop on runlevel 6
console owner
exec /usr/sbin/nginx -c /etc/nginx/nginx.conf -g "daemon off;"
respawn
Recebo "trabalho desconhecido" quando tento usar o initctl para executá-lo, o que acabei de aprender aparentemente significa que há um erro (o que há de errado com "Erro" para descrever erros?)
Alguém pode me apontar na direção certa? Eu li a documentação, como ela é, e parece meio escassa para uma substituição de init do SysV ... mas o que for necessário para adicionar esse trabalho à lista, executá-lo e continuar com o que resta da minha vida. .. Alguma dica?
EDIT: initctl versão init (inicial 0.6.5)
ubuntu
upstart
ubuntu-10.04
chiggsy
fonte
fonte
Respostas:
Você não pode ter várias
stop on
diretivas em uma descrição do trabalho inicial para Iniciante> = 0,5.E
console owner
provavelmente não é o que você deseja (isso faz do nginx o proprietário do console do sistema).Tentar:
fonte
man 5 init
daemon off
opção é apenas para desenvolvimento.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):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
eenv 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
. Apenasexpect 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#daemonReferências:
fonte
daemon off;
para que o iniciante assista o processo / PID correto sem a necessidade das diretivasexpect fork
oupost-stop
. A seção wiki que descreve a opção daemon também declara "Você pode usar o daemon off com segurança no modo de produção com runit / daemontools, no entanto, não é possível fazer uma atualização normal.", Que eu assumo que esteja se referindo à atualização para um novo binário no diretório recurso de voar .Você não pode. Pelo menos não corretamente, de qualquer maneira.
O Nginx não gera seu daemon de uma das duas maneiras que o iniciante exige, seja por meio de "expect fork" ou "expect daemon", portanto, o iniciante não pode acompanhar o processo principal do nginx. Existem alguns hacks, mas eles têm seus próprios problemas.
Se você concorda com o fato de que o iniciante não pode acompanhar o processo principal e eliminá-lo no desligamento, isso funcionará:
fonte
expect daemon
faz com que o inicio seja travado para mim (Ubuntu 12.04, Upstart 1.5, Nginx).expect fork
funcionou, embora, como sugere @danorton, o Upstart esteja rastreando o PID errado. Também não consegui reaparecer para o trabalho (veja minha resposta completa).Há um exemplo de arquivo de configuração inicial no Wiki do NGINX .
Pode ser necessário ajustar o caminho para o binário nginx no arquivo de configuração.
Este arquivo de configuração está funcionando bem para mim com o Ubuntu 10.04 e o nginx 1.0.5.
Também instalei um
nginx
link simbólico para/etc/init.d
apontar para/lib/init/upstart-job
que eu pudesse usar oservice
comando padrão para iniciar e pararnginx
.Nota: Se você instalar o Phusion Passenger com NGINX, poderá precisar adicionar a seguinte estrofe ao script de configuração do Upstart:
Achei isso necessário na minha configuração do Ubuntu. Caso contrário, quando eu emiti
initctl stop nginx
ou oservice nginx stop
nginx não parou. Notei também que a Upstart achava que o processo nginx tinha um PID que na verdade era o PID de um dos processos do Passenger. Tão claramente que o NGINX / Passenger está confundindo um pouco o Upstart.fonte
stop: Job failed while stopping
fazê-lo. Você viu isso?Eu uso:
A parada
runlevel [!...]
parece ser mais padrão. É o que os scripts ssh / samba padrão fazem. Você também deve adicionar orespawn
bit para que ele reinicie se morrer. Também não sei por que você desejaconsole output
que simplesmente envie a saída do console para o stdout. O comportamento padrão é simplesmente enviar a saída do console para o criador de logs.Você pode ver todos os documentos de estrofe no wiki do Upstart
fonte
Veja http://geeknme.wordpress.com/2009/10/15/getting-started-with-upstart-in-ubuntu para mais.
fonte
Estranhamente, nenhuma das respostas aqui realmente funciona totalmente quando elas deixam o inicio em um estado de parada / interrupção, o que impede outro começo de funcionamento. Isso significa que
restart nginx
falha.O bug do upstart está bem documentado em https://bugs.launchpad.net/upstart/+bug/406397 e estou surpreso que o autor do upstart não pareça se importar o suficiente para corrigi-lo. A única solução que vi que funciona é a seguinte (roubada do mesmo relatório de bug):
A vantagem de escrevê-lo assim é que até o respawn funciona. A desvantagem é que é feio e um truque desagradável.
fonte