¿Hay alguna forma de validar el formato / etc / crontab?

35

Prefiero pegar las tareas programadas en / etc / crontab para poder ver de un vistazo lo que está programado para ejecutarse, independientemente de qué usuario se ejecute la tarea.

El único problema es que el formato no se valida al guardar, a diferencia de crontab -e, por lo que un personaje perdido puede romper silenciosamente todo el cron.

¿Hay alguna forma de validar el formato / etc / crontab antes / después de guardar?

Ben K.
fuente
44
Si, como yo, viniste aquí buscando una manera simple (no programable) de decirte si tenías tu entrada cron correcta, es posible que te interese cronchecker.net : es un validador en línea para entradas cron con human- salida amigable.
Matt Gibson

Respuestas:

18

La única forma confiable que encontré es verificar el registro.

croncomprueba /etc/crontabcada minuto y registra un mensaje que indica que lo ha vuelto a cargar o que ha encontrado un error.

Entonces, después de editar, ejecuta esto:

sleep 60; grep crontab /var/log/syslog | tail

O, para no esperar un minuto completo, sino solo hasta el siguiente minuto + 5 segundos:

sleep $(( 60 - $(date +%S) + 5 )) && grep cron /var/log/syslog | tail

Ejemplo de salida con un error:

Jan  9 19:10:57 r530a cron[107258]: Error: bad minute; while reading /etc/crontab
Jan  9 19:10:57 r530a cron[107258]: (*system*) ERROR (Syntax error, this crontab file will be ignored)

Buena salida:

Jan  9 19:19:01 r530a cron[107258]: (*system*) RELOAD (/etc/crontab)

Eso está en Debian 8. En otros sistemas, cron puede iniciar sesión en un archivo diferente.

(Pensé que podría evitar buscar el archivo de registro correcto usando systemd's journalctl -u cron, pero eso no me mostró estas entradas de registro, y en realidad parece haber dejado de registrar eventos cron hace 2 días por alguna razón)

mivk
fuente
Probado en FreeBSD 10.3. Funciona como un encanto, solo reemplace la ruta de registro con / var / log / cron
Jette
14

Otra solución más reciente es el script de Python chkcrontab

Dave Wongillies
fuente
Todavía no verifica los cronjobs de los usuarios
userlond
3

Encontré esta solución genial aquí: https://crontab.guru

No solo valida el crontab, le dice explícitamente qué y cuándo se ejecutará el crontab, y resalta dónde están los errores.

JDS
fuente
0

En Ubuntu, parece que solo puedo ejecutar:

crontab path/to/crontab/file

NOTA: esto tiene el efecto secundario de iniciar este cronjob (gracias @NZD)

Si el archivo no es válido, aparecerá un error, como:

"crontab":11: bad minute
errors in crontab file, can't install.
conradkdotcom
fuente
1
Este comando comprueba el archivo crontab, pero al mismo tiempo lo instala (si no contiene errores). Este es probablemente un efecto secundario no deseado para el OP.
NZD
Gracias @NZD, agregué esto a mi respuesta para asegurarme de que el OP lo sepa.
conradkdotcom
@conradk el comando no inicia el cronjob, sobrescribe el archivo crontab existente del usuario con el archivo proporcionado.
MadHatter apoya a Monica el
En realidad, esto no funciona para todos los posibles problemas con el crontab; detectará algunos problemas evidentes, pero no detecta esto, por ejemplo: * 4/0 * * /bin/myscript.sh - el 4/0no es válido. pero no es atrapado por este método
JDS
@JDS ¿No es un valor de paso? ¿Está 0prohibido el valor escalonado ? unix.stackexchange.com/questions/32027/…
conradkdotcom