J'essaie de comprendre pourquoi cron refuse de fonctionner avec un certain fichier crontab. La page de manuel de crontab dit :
cron exige que chaque entrée d'une crontab se termine par un caractère de nouvelle ligne. Si la dernière entrée d'une crontab ne comporte pas de nouvelle ligne, cron considère que la crontab est (au moins partiellement) cassée et refuse de l'installer. refusera de l'installer.
Étant donné le fichier cron suivant :
\# managed by Fabric$
$
SHELL=/bin/sh$
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin$
$
# m h dom mon dow user command$
17 \* \* \* \* root cd / && run-parts --report /etc/cron.hourly$
25 6 \* \* \* root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )$
47 6 \* \* 7 root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly )$
52 6 1 \* \* root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly )$
$
# Postgres monitoring$
\* \* \* \* \* postgres cd / && /etc/cron.d/pgup.sh$
\*/5 \* \* \* \* postgres cd / && /etc/cron.d/aws-scripts-mon/mon-put-instance-data.pl --mem-avail --disk-space-util --disk-path=/mnt$
$
# Postgres Backup$
00 00 \* \* \* postgres /etc/cron.d/pgbackup.sh$
Noter que le caractère "$" indique un caractère LF (format vim unix).
Et je reçois l'erreur suivante dans syslog lorsque je redémarre cron :
Mar 31 17:34:02 postgres-primary0 cron[30852] : ( système ) ERROR (saut de ligne manquant avant EOF, ce fichier crontab sera ignoré)
Et l'ajout d'une ligne vide à la fin du fichier cron n'entraîne aucune erreur lors du redémarrage de cron.
Conclusion :
Pour autant que je sache, la dernière entrée se termine par un caractère de nouvelle ligne. Il semble donc que la crontab ne la reconnaisse pas.
Est-ce un bug ? Peut-être que l'intention était qu'il y ait une nouvelle ligne sur sa propre ligne à la fin du fichier, auquel cas la documentation est trompeuse. Ou peut-être que je ne comprends pas correctement le terme "nouvelle ligne" dans ce contexte... Une clarification sur ce point serait appréciée.