Certifique-se de que o cron daemon permaneça em execução

Certifique-se de que o cron daemon permaneça em execução

Se em umdebian7servidor (wheezy) rodando em uma VM hospedada e um daemon atualizado, cronhá um bug, então o cron parou de funcionar sem motivo óbvio. Como isso só aconteceu uma vez desde então, é difícil depurar.

Como você pode garantir que o cron seja reiniciado automaticamente se ele travar novamente e enviar um alerta por e-mail?

Responder1

Você sempre pode conferir omonitorarprojeto.
Você pode reiniciar os serviços e mantê-los atualizados.
Se não houver como corrigir seu cron conforme sugerido pelos comentários.

Responder2

Não poderia executar algo como daemontools para monitorar e reiniciar o processo?

Sim, de fato; e em algumas máquinas eu faço exatamente isso. O "algo como daemontools" é na verdade o gerenciador de serviços doo pacote noshmas outros membros da família daemontools são mais do que capazes de supervisionar o cron GNU. (Vixie cron é outra questão, mas você disse Debian.)

GNU cron é um dos serviços mais simples de executar no gerenciamento de serviços da família daemontools. A coleção de scripts de execução de Gerrit Pape possui isso, assim como a coleção de pacotes de serviços que acompanha o conjunto de ferramentas nosh.

Dito isto, não me lembro de ter precisado reiniciar o GNU cronporque caiu.

Por outro lado, o gerenciamento de serviços não envolve apenas a reinicialização automática. Isso étambémsobre registro e controle de recursos, ambos relevantes para a tarefa dediagnosticando por queO cron do GNU está travando em você.

Diagnosticar o problema envolveria coisas como:

  • Editando o runprograma a ser usado softlimitpara ativar core dumps.
  • Editando o restartscript (ou equivalente)…
    • … para verificar se o daemon saiu ou terminou com um sinal.
    • … para coletar core dumps.
    • … para gerar alertas e enviar notificações por e-mail. (Certa vez, configurei um restartscript para me enviar as últimas linhas de log/main/currentuma falha/aborto.)
    • … para ajustar a limitação da taxa de reinicialização.
  • Lendo o log individual do cron GNU e o próprio log do gerenciador de serviço, para determinar quando e com que frequência o daemon foi reiniciado e quais mensagens de erro (se houver) ele emitiu.

Leitura adicional

Responder3

Como não é possível monitorar crondvia, crondeu faria desta forma:
echo "while true; do if ! (ps aux |grep crond |grep -v grep); then /etc/init.d/crond start; fi && sleep 5; done &" >> /etc/rc.local

Responder4

Não há necessidade de instalar daemontools, runit, supervise, etc. Por mais úteis que sejam essas ferramentas, elas cobrem casos de uso dos quais você geralmente não precisa apenas para o cron. O que você simplesmente precisa pode ser tratado facilmente com o init. Adicione ao /etc/inittab:

cron:2345:respawn:/usr/sbin/crond -n

Certifique-se crondde que suporta a -nopção primeiro. Isso diz para não bifurcar e permanecer em primeiro plano. ** Certifique-se de desabilitar o crond dos scripts rc **.

/usr/lib/lsb/remove_initd /etc/init.d/crond

Se, por algum motivo, o crond gerar saída para stdout ou stderr, você precisará escrever um script wrapper para lidar com essa saída e gerar o script wrapper. Mantenha esse script simples:

#!/bin/sh
#crond-wrapper.sh 
exec crond -n &>>/var/log/crond

Como alternativa, você pode modificar o script empacotado existente init.d/crondpor um que seja invocado crond -nem um loop while. Mas, nesse caso, você precisa ser esperto ao salvar o arquivo pidpara uso posterior por este script.

informação relacionada