it-swarm-fr.com

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

Je préfère coller les tâches planifiées dans/etc/crontab afin que je puisse voir en un coup d'œil ce qui doit être exécuté, quel que soit l'utilisateur sous lequel la tâche s'exécute.

Le seul problème est que le format n'est pas validé lors de la sauvegarde, contrairement à crontab -e - donc un personnage errant peut discrètement casser le cron entier.

Existe-t-il un moyen de valider le format/etc/crontab avant/après la sauvegarde?

37
Ben K.

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

cron vérifie /etc/crontab toutes les minutes et enregistre un message indiquant qu'il l'a rechargé ou qu'il a trouvé une erreur.

Donc, après l'édition, exécutez ceci:

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

Ou, pour ne pas attendre une minute entière, 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 à un fichier différent.

(Je pensais que je pouvais éviter de chercher le bon fichier journal en utilisant journalctl -u cron De systemd, mais cela ne m'a pas montré ces entrées de journal, et semble avoir arrêté la journalisation des événements cron il y a 2 jours pour une raison quelconque)

20
mivk

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

14
Dave Wongillies

Wicked cool Shell scripts a un script Shell qui valide les fichiers crontab.

Vous pouvez obtenir l'archive Zip contenant le script ici

Le script est appelé verifycron

11
Ludwig Weinzierl

J'ai trouvé cette solution sympa ici: https://crontab.gur

Il ne valide pas seulement la crontab, il vous indique explicitement quoi et quand la crontab s'exécutera, et met en évidence où se trouvent les erreurs.

3
JDS

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

crontab path/to/crontab/file

REMARQUE: cela a pour effet secondaire de démarrer ce cronjob (merci @NZD)

Si le fichier n'est pas valide, je vais faire une erreur, comme:

"crontab":11: bad minute
errors in crontab file, can't install.
0
conradkdotcom