J'ai essayé de mettre en place une tâche cron racine pour exécuter un script Bash en tant que root, pour s'exécuter à la minute 7 et 37, toutes les heures, tous les jours du mois, tous les mois. Ce script est situé dans /usr/bin
et nommé tunlrupdate.sh
. Il met à jour le DNS de Tunlr.
$ ls -l /usr/bin/tunlrupdate.sh
-rwxr-xr-x 1 root root 2133 Sep 24 15:42 /usr/bin/tunlrupdate.sh
Ce script Bash est disponible ici.
Lorsqu'il est invoqué, le script écrit ce qui se passe dans un journal situé dans /var/log/tunlr.log
Pour ajouter cette tâche cron racine, j'ai utilisé la norme pour le crontab de root
sudo crontab -e
Et j'ai inséré ces 2 lignes à la fin. Je m'attends à ce que cron exécute le script en tant que root.
# vérifier les mises à jour DNS de Tunlr toutes les 30 minutes à l'heure + 7 mn et l'heure + 37 mn
07,37 * * * * root /usr/bin/tunlrupdate.sh
Une commande ultérieure sudo crontab -l
a confirmé que la tâche cron a été insérée.
J'ai redémarré Ubuntu et vérifié dans le fichier journal si la tâche cron était lancée correctement. Cependant, il n'y a rien dans le fichier journal /var/log/tunlr.log
, ce qui signifie que la tâche n'a jamais été lancée avec succès.
J'ai vérifié que si je lance le script depuis la ligne de commande
sudo /usr/bin/tunlrupdate.sh
alors le fichier journal est mis à jour en conséquence.
Pourquoi cette tâche cron ne s'exécute-t-elle pas comme prévu sur mon système ?
MISE À JOUR 1 : Toutes les solutions proposées jusqu'à présent ne fonctionnent pas. Je remercie Olli pour une CLI pour lister le journal système sudo grep CRON /var/log/syslog
. Cependant, j'ai obtenu une erreur CRON
CRON[13092]: (root) CMD ( [ -x /usr/lib/php5/maxlifetime ] && [ -d /var/lib/php5 ]
&& find /var/lib/php5/ -depth -mindepth 1 -maxdepth 1 -type f -cmin +$(/usr/lib/php
/maxlifetime) ! -execdir fuser -s {} 2>/dev/null \; -delete)
avec l'insertion suggérée de PATH= et l'utilisation d'un chemin absolu de root pour les fonctions dans le script ou sans ces solutions suggérées ici. J'obtiens toujours cette erreur.
Après quelques recherches, j'ai identifié l'erreur dans le fichier /usr/lib/php5/maxlifetime
comme expliqué ici : Change #!/bin/sh -e --> #!/bin/sh -x
Ensuite, en listant le journal d'erreurs CRON de mon système
sudo grep CRON /var/log/syslog
Feb 11 18:07:01 Marius-PC CRON[14067]: (root) CMD (root /usr/bin/tunlrupdate.sh)
Feb 11 18:07:01 Marius-PC CRON[14066]: (root) MAIL (mailed 1 byte of output; but got
status 0x00ff, #012)
Je ne parviens toujours pas à exécuter le script bash. Cette fois, aucune erreur n'est affichée dans le journal. Pour m'assurer que ce n'était pas le contenu du script, j'ai réduit le script aux 3 lignes suivantes :
#!/bin/bash
LOGFILE=/var/log/tunlr.log
echo $LOGFILE >> $LOGFILE
Je n'arrive toujours pas à obtenir la tâche cron. Rien n'est écrit dans le fichier journal. Donc même un script vide ne s'exécutera peut-être pas dans cron ? Je ne comprends pas. J'essaie maintenant un script réduit à ces 2 lignes :
#!/bin/bash
exit 0
Et toujours le même journal d'erreurs. Le script cron ne passe pas...