Eu tenho uma situação em que um servidor RHEL 6.4 está enviando TERM
e KILL
sinalizando muito rapidamente, antes que os aplicativos e bancos de dados tenham a chance de parar normalmente. Parece que o Upstart está entregando o controle aos scripts sysv-rc prematuramente.
Para solucionar isso, tentei adicionar comandos sleep
e logger
na configuração do Upstart. A pre-script
sub-rotina está gravando no syslog, mas a suspensão nunca é concluída porque o sistema é reinicializado em 10 segundos. Eu também adicionei um kill timeout
que é ignorado.
# cleanup at system shutdown
# Does stop all on apps, stops monit instances, then does a clean.
start on runlevel [016]
console output
kill timeout 120
task
pre-start script
logger -s -t "arcsight-services-stopall" "Running pre-start..."
/etc/init.d/arcsight_services stop
sleep 60
end script
script
logger -s -t "arcsight-services-stopall" "Running script..."
/etc/init.d/arcsight_services shutdown monit
/etc/init.d/arcsight_services clean all
end script
Eu sei que o Upstart deveria paralelizar o processo de inicialização/parada, mas isso apenas paralisou minhas tentativas de depuração.
No RHEL 6, qual é a ordem definitiva dos scripts que são executados após a emissão: shutdown -r now
?
shutdown -r now
?????
/etc/init/rc.conf
(Subir na vida)/etc/rc.d/rc
(sysv-rc)?????
/etc/rc3.d/K*
(sysv-rc)/etc/rc6.d/S*
(sysv-rc)?????
Onde os outros scripts /etc/init/*.conf são chamados?
ATUALIZAÇÃO: Ao dissecar /etc/rc.d/rc
, descobri que, se eu touch /var/run/confirm
, o processo entra em um modo interativo e então meus comandos sleep & logger parecem ser executados. Isso me deixa perplexo, porque pensei que naquele ponto o Upstart havia passado o controle para o sysv-rc.
Responder1
Embora esta resposta não aborde a ordem dos scripts que são executados durante um desligamento do RHEL 6, ela resolve o problema de o sistema encerrar processos antes que eles sejam interrompidos normalmente.
/etc/init/arcsight-services-stopall.conf:
# cleanup at system shutdown
# Does stop all on apps, stops monit instances, then does a clean.
start on starting rc RUNLEVEL=[016]
task
kill timeout 330
pre-start script
logger -s -t "ArcSight" "ArcSight ESM shutdown initiated..."
/etc/init.d/arcsight_services shutdown all
/etc/init.d/arcsight_services shutdown monit
/etc/init.d/arcsight_services clean all
sleep 300
end script
script
logger -s -t "ArcSight" "ArcSight ESM shutdown complete."
end script
A chave estava modificando start on starting rc RUNLEVEL=[016]
. Ao iniciar este script enquanto /etc/init/rc.conf
está iniciando, ele bloqueia por 5 minutos, antes que os scripts sysv-rc sejam executados. Esperançosamente, durante esses 5 minutos, todos os bancos de dados e aplicativos ArcSight serão interrompidos normalmente. Os testes indicaram que tudo foi interrompido em 3 minutos, portanto 5 minutos deve ser um atraso seguro.
É sempre bom ver que um produto multimilionário exige um hack do cliente.