Existe-t-il un moyen de valider le format de / etc / crontab?

35

Je préfère coller les tâches planifiées dans / etc / crontab afin de pouvoir visualiser d'un coup d'œil ce qui doit être exécuté, quel que soit l'utilisateur sous lequel la tâche est exécutée.

Le seul inconvénient, c'est que le format n'est pas validé lors de la sauvegarde, contrairement à crontab -e. Ainsi, un personnage errant peut discrètement briser le cron.

Existe-t-il un moyen de valider le format / etc / crontab avant / après l'enregistrement?

Ben K.
la source
4
Si, comme moi, vous êtes venu ici à la recherche d'un moyen simple (sans script) de vous dire si vous avez bien saisi votre entrée cron, cronchecker.net pourrait vous intéresser - c'est un validateur en ligne pour les entrées cron avec human- sortie sympathique.
Matt Gibson

Réponses:

18

Le seul moyen fiable que j'ai trouvé est de consulter le journal.

cronvérifie /etc/crontabtoutes les minutes et enregistre un message indiquant qu'il l'a rechargée ou qu'il a détecté une erreur.

Donc, après l'édition, lancez ceci:

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

Ou, pour ne pas attendre une minute complète, mais seulement jusqu'à la minute suivante + 5 secondes:

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

Exemple de sortie avec une erreur:

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)

Bon rendement:

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

C'est sur Debian 8. Sur d'autres systèmes, cron peut se connecter dans un fichier différent.

(Je pensais pouvoir éviter de rechercher le bon fichier journal en utilisant systemd journalctl -u cron, mais cela ne m'a pas montré ces entrées de journal et semble en fait avoir arrêté de consigner les événements cron il y a 2 jours pour une raison quelconque)

mivk
la source
Testé sur FreeBSD 10.3. Fonctionne comme un charme, il suffit de remplacer le chemin de journalisation par / var / log / cron
Jette
14

Une autre solution plus récente est le script python chkcrontab

Dave Wongillies
la source
Il ne vérifie pas encore les cronjobs des utilisateurs
userlond
3

J'ai trouvé cette solution intéressante ici: https://crontab.guru

Elle ne fait pas que valider la crontab, elle vous indique explicitement quoi et quand la crontab sera exécutée et met en évidence les erreurs.

JDS
la source
0

Sur Ubuntu, il semble que je puisse simplement exécuter:

crontab path/to/crontab/file

NOTE: cela a pour effet secondaire de démarrer ce travail cron (merci @NZD)

Si le fichier n'est pas valide, je commettrai une erreur, telle que:

"crontab":11: bad minute
errors in crontab file, can't install.
Conradkdotcom
la source
1
cette commande vérifie le fichier crontab, mais l'installe en même temps (s'il ne contient aucune erreur). Ceci est probablement un effet secondaire indésirable pour le PO.
2016 NZD
Merci @NZD, j'ai ajouté ceci à ma réponse pour m'assurer que le PO est conscient de cela.
Conradkdotcom
@conradk la commande ne démarre pas le travail cron, elle écrase le fichier crontab existant de l'utilisateur avec le fichier fourni.
MadHatter soutient Monica
Cela ne fonctionne pas réellement pour tous les problèmes possibles avec la crontab; il va attraper quelques problèmes criants, mais il ne comprend pas ceci, par exemple: * 4/0 * * /bin/myscript.sh - le 4/0est invalide. mais n'est pas attrapé par cette méthode
JDS
@ JDS N'est-ce pas une valeur de pas? Une valeur de pas est-elle 0interdite? unix.stackexchange.com/questions/32027/…
conradkdotcom