
Se em umdebian7servidor (wheezy) rodando em uma VM hospedada e um daemon atualizado, cron
há 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
run
programa a ser usadosoftlimit
para ativar core dumps. - Editando o
restart
script (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
restart
script para me enviar as últimas linhas delog/main/current
uma 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
- Jonathan de Boyne Pollard (2015).A família daemontools. Respostas dadas com frequência.
- Gerrit Pape.Pacotes Debian
- https://unix.stackexchange.com/a/283132/5132
- https://unix.stackexchange.com/a/283580/5132
Responder3
Como não é possível monitorar crond
via, crond
eu 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 crond
de que suporta a -n
opçã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/crond
por um que seja invocado crond -n
em um loop while. Mas, nesse caso, você precisa ser esperto ao salvar o arquivo pid
para uso posterior por este script.