====== Crontab ======
----
===== Edition =====
==== Editeur par défaut ====
Le choix de l'éditeur se fait lors de la première utilisation ou bien par la commande :
select-editor
Vérification par la commande :
cat .selected_editor
==== Action sur la crontab ====
^ Commande ^ Fonction ^
| crontab -l | visualisation de la crontab |
| crontab -e | édition de la crontab |
| crontab -r | suppression de la crontab |
| crontab -e -u user | édition de la contab de l'utilisateur user |
| sudo crontab -e | édition de la crontab root |
==== Vérifier le service ====
systemctl status cron
----
[[all:bibles:linux:crontab|Haut de page]]
===== Exemples =====
==== Tous les jours à 4h45 ====
45 4 * * * /root/script.pl
==== Tous les week-end à 4h50 ====
50 4 * * 6,7 /root/script.pl
==== Tous les 1er mai à 4h50 ====
50 4 1 5 * /root/script.pl
==== Toutes les 5 mn le soir entre 20h et 24h ====
*/5 20-23 * * * /root/script.pl
==== Au redémarrage de la machine ====
=== Juste après le redémarrage ===
@reboot /root/script.pl
=== 5 mn après le redémarrage ===
@reboot sleep 300 && /root/script.pl
----
[[all:bibles:linux:crontab|Haut de page]]
===== Modification sans éditeur =====
==== Localisation des fichiers ====
Chaque fichier crontab porte le nom de l'utilisateur en plus de l'utilisateur root.
=== Ubuntu ===
Les fichiers se trouvent sous /var/spool/cron/crontabs
=== Redhat/CentOS ===
Les fichiers se trouvent sous /var/spool/cron
==== Création ====
cat << tagFIN > nomdufichier
...
...
tagFIN
taper les lignes au fur et à mesure en finissant par la dernière : tagFIN
==== Ajout ====
cat << tagFIN >> nomdufichier
...
...
tagFIN
taper les lignes au fur et à mesure en finissant par la dernière : tagFIN
----
===== Dépannage =====
==== You are not allowed to use this program (crontab) ====
* Vérifier que l'utilisateur n'est pas présent dans le fichier /etc/cron.deny
* Si nécessaire ajouter le nom de l'utilisateur dans le fichier /etc/cron.allow
==== Envoi de mail ====
Il est possible de positionner la variable MAILTO en début de crontab
MAILTO="" # pour éviter de recevoir des mails dans la boite de l'utilisateur
MAILTO="toto@machin.fr" # pour rediriger vers une autre boite mail
==== Process zombie ====
Pour éviter la présence de process zombie en cas d'échec il convient de rediriger la sortie standard et d'erreur
* * * * * /chemin/script.sh >> /var/log/monscript.log 2>&1
==== Execution ne fonctionne pas sous cron ====
Il arrive souvent qu'un script qui fonctionne parfaitement en interactif ne fonctionne plus quand on essaye de l'exécuter via une tâche sous cron.
=== Variables d'environnement ===
Lors de l'exécution sous cron, en non interactif, l'environnement utilisateur n'est pas initialisé et donc certaines variables d'environnements ne sont pas initialisées. Par exemple la variable PATH est minimale (/usr/bin et /bin seulement).
* Indiquer le chemin complet pour faire appel à un programme
* Ajouter le chemin à la variable PATH dans la crontab
*/5 20-23 * * * PATH=; /root/script.pl
=== droits sudo ===
Pour pouvoir utiliser la commande sudo dans un script exécuté sous cron il faut pouvoir utiliser la commande sans mot de passe (voir [[all:bibles:linux:commandes:sudo|]]). Sinon le script s'exécute sans s'arrêter pour demander le mot de passe, sans erreur mais sans exécuter la commande.
==== Investigations ====
Pour debbuger un script sous cron ajouter des redirections de la console standard et d'erreur :
*/5 20-23 * * * /root/script.pl > /tmp/stdout.log 2>/tmp/stderr.log
----
[[all:bibles:linux:crontab|Haut de page]]