
si en undebian 7servidor (wheezy) que se ejecuta en una máquina virtual alojada y un demonio actualizado, cron
hay un error por lo que cron dejó de ejecutarse sin una razón obvia. Dado que esto sólo ocurrió una vez desde entonces, es difícil depurar.
¿Cómo puede asegurarse de que cron se reinicie automáticamente si vuelve a fallar y envía una alerta por correo electrónico?
Respuesta1
Siempre puedes consultar elmonitorizarproyecto.
Puede reiniciar los servicios y mantenerlos al día.
Si no hay forma de arreglar su cron como se sugiere en los comentarios.
Respuesta2
¿No podría ejecutar algo como daemontools para monitorear y reiniciar el proceso?
Sí, de hecho; y en algunas máquinas hago exactamente eso. "Algo así como daemontools" es en realidad el administrador de servicios deel paquete de comidapero otros miembros de la familia daemontools son más que capaces de supervisar cron GNU. (Vixie cron es otro asunto, pero dijiste Debian).
GNU cron es uno de los servicios más simples de ejecutar bajo la administración de servicios de la familia daemontools. La colección de scripts de ejecución de Gerrit Pape lo tiene, al igual que la colección de paquetes de servicios que acompaña al conjunto de herramientas nosh.
Dicho esto, no recuerdo haber necesitado nunca reiniciar GNU cronporque se estrelló.
Por otro lado, la gestión de servicios no se trata sólo de un reinicio automático. Estambiénsobre la tala y el control de recursos, los cuales son relevantes para la tarea dediagnosticando por quéEl cron de GNU se está bloqueando.
Diagnosticar el problema implicaría cosas como:
- Edición del
run
programa que se utilizarásoftlimit
para habilitar los volcados de memoria. - Editando el
restart
guión (o equivalente)…- … para comprobar si el demonio salió o terminó con una señal.
- … para recopilar volcados de memoria.
- … para generar alertas y enviar notificaciones por correo. (Una vez configuré un
restart
script para enviarme por correo las últimas líneas enlog/main/current
caso de falla o cancelación). - … para ajustar la limitación de la velocidad de reinicio.
- Leer el registro individual del cron de GNU y el propio registro del administrador de servicios para determinar cuándo y con qué frecuencia se ha reiniciado el demonio y qué mensajes de error (si los hay) ha generado.
Otras lecturas
- Jonathan de Boyne Pollard (2015).La familia daemontools. Respuestas dadas con frecuencia.
- Gerrit Pape.paquetes debian
- https://unix.stackexchange.com/a/283132/5132
- https://unix.stackexchange.com/a/283580/5132
Respuesta3
Como no se puede monitorear crond
a través de crond
mí, lo haría de esta manera:
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
Respuesta4
No es necesario instalar daemontools
, runit
, supervise
, etc. Por muy útiles que sean estas herramientas, cubren casos de uso que generalmente no necesita solo para cron. Lo que simplemente necesita se puede manejar cómodamente con init. Agregar a /etc/inittab:
cron:2345:respawn:/usr/sbin/crond -n
Primero asegúrese crond
de que admita la -n
opción. Esto le indica que no se bifurque y que permanezca en primer plano. **Asegúrese de desactivar crond desde los scripts rc**.
/usr/lib/lsb/remove_initd /etc/init.d/crond
Si, por alguna razón, crond genera salidas a stdout o stderr, necesitará escribir un script contenedor para manejar esa salida y generar el script contenedor. Mantenga ese guión simple:
#!/bin/sh
#crond-wrapper.sh
exec crond -n &>>/var/log/crond
Alternativamente, puede modificar el init.d/crond
script empaquetado existente con uno que invoque crond -n
dentro de un bucle while. Pero en ese caso, debe ser inteligente al guardarlo pid
para usarlo más adelante con este script.