RHEL6 Upstart: Fluxo de eventos durante a reinicialização

RHEL6 Upstart: Fluxo de eventos durante a reinicialização

Eu tenho uma situação em que um servidor RHEL 6.4 está enviando TERMe KILLsinalizando 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 sleepe loggerna configuração do Upstart. A pre-scriptsub-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 timeoutque é 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?

  1. shutdown -r now
  2. ?????
  3. /etc/init/rc.conf(Subir na vida)
  4. /etc/rc.d/rc(sysv-rc)
  5. ?????
  6. /etc/rc3.d/K*(sysv-rc)
  7. /etc/rc6.d/S*(sysv-rc)
  8. ?????

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.confestá 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.

informação relacionada