Como especificar um comando de encerramento de daemon com upstart?

9

Em uma configuração inicial, como defino qual comando deve ser usado para desligar um servidor. Digamos que eu tenho daemon que possui dois processos separados.

  • startup.sh - para iniciar o servidor
  • shutdown.sh - para desligar o servidor

Suponha que eu tenha um arquivo inicial que se parece com isso.

description "Some Example Service"
author "Me"

start on runlevel [2345]
stop on runlevel [016]
respawn

exec startup.sh 

Como eu digo ao iniciante que ele deveria chamar shutdown.shao desligar o servidor? Como o iniciante normalmente espera desligar um daemon?

ams
fonte

Respostas:

10

Usar execpara iniciar o processo é bom, mas ao interrompê-lo, se você absolutamente precisar executar um script ou conjunto de comandos específico, poderá usar a pre-stopestrofe.

pre-stop exec shutdown.sh

Suponho que você tenha tentado apenas usar uma estrofe executiva e ela não funcionou, possivelmente porque seu daemon requer alguma limpeza especializada. Observe que os daemons bem comportados devem receber um sinal inicial quando a tarefa for interrompida e, se eles manipularem o sinal adequadamente, nenhuma limpeza adicional será necessária.

Parar um trabalho envolve enviar o SIGTERM para ele. Se houver algo que precise ser feito antes do SIGTERM, faça-o aqui. Indiscutivelmente, os serviços devem lidar com o SIGTERM com muita graciosidade, portanto isso não deve ser necessário.

se houver algo crítico, como uma descarga para o disco e aumentar o tempo limite de interrupção não for uma opção, a pré-parada não é um mau lugar para fazer isso

Leia também esta seção para obter todo o fluxo de trabalho do que acontece quando você interrompe um trabalho. Observe quando a pré-parada é executada e como um sinal é enviado ao processo posteriormente, e é assim que o iniciante lida com a interrupção dos trabalhos normalmente.

Minha fonte é o livro oficial de receitas Upstart em: http://upstart.ubuntu.com/cookbook/

roadmr
fonte
11
"Observe que os daemons bem comportados devem receber um sinal inicial quando o trabalho for interrompido e, se eles manipularem o sinal adequadamente, nenhuma limpeza adicional será necessária." - note que usamos scripts no mundo Unix para controlar as coisas além do trabalho dos programadores. E isso é uma observação ridícula, porque precisamos de um lugar para incluir, por exemplo, o envio de um email, a remoção do bloqueio do dis etc., e essas tarefas não precisam fazer parte do próprio daemon. Portanto, o iniciante não está pronto para ser usado no ambiente de servidores.
kakaz
A partir desta resposta (a única!), Vejo que não há uma boa maneira de fazer o que precisamos?
kakaz