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

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

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=<liste:des:chemins:indispensables>; /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 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

Haut de page