CRON : Configuration de tâches automatisées

1. Présentation

Cron est un service ou démon (crond) permettant d'exécuter des tâches à des intervalles de temps réguliers. Il est présent sur tout système de type Unix et distributions GNU/linux dont Fedora.

Bref, un outil indispensable.

La configuration de cron se fait via des fichiers au format crontab, il existe un fichier par utilisateur (root est aussi un utilisateur).

L'utilisateur pourra ajouter une action, en éditant son fichier crontab.

L'administrateur disposera de plusieurs solutions :

Attention, le fichier crontab de configuration du système (/etc/crontab) ne doit pas être utilisé pour planifier des tâches. Il contient uniquement les options de configuration de cron. Si vous l'éditez, il est recommandé de faire au préalable une sauvegarde du fichier en cas de problème.

2. Syntaxe des fichiers au format crontab

Il existe 7 champs paramétrables par un nombre, une chaîne de caractères, séparés par un espace :
minute(1) heure(2) jour(mois)(3) mois(4) jour(semaine)(5) utilisateur(6) commande(7)

Il existe aussi des caractères spéciaux

Supposons qu'on veuille vider un répertoire tmp dans notre home toutes les heures.

* */1 * * *  rm -rf ~/tmp

Un autre exemple, pratique pour les étudiants et les travailleurs, se réveiller en musique tout les jours de la semaine sauf le week-end avec xmms.

0 6 * * 1-5 DISPLAY=:0 xmms -p
Note tip.png Propriété DISPLAY
La propriété DISPLAY est obligatoire pour toute application tournant au dessus de X11, par défaut c'est 0.

Supposons que l'on veuille lancer le script sauvegarde.sh régulièrement le mercredi et le vendredi à 4h du matin.

0 4 * * 3,5 sauvegarde.sh

pour supprimer les mails, il suffit de rajouter à la fin de la commande >/dev/null 2>&1

3. Comment éditer son fichier crontab (utilisateur)

Note tip.png Édition graphique
Par défaut, "crontab -e" ouvre vi (cela reste la solution recommandée).

Pour utiliser votre éditeur de texte préféré, il suffit de définir la variable d'environnement VISUAL, exemple :

VISUAL=gedit crontab -e

Pour information : les fichiers sont stockés dans le dossier /var/spool/cron avec le nom de l'utilisateur.

4. Quelques considérations à propos de cron

Note tip.png Interpréteur
Par défaut, cron utilise le /bin/bash comme interpréteur de script et une chemin de recherche réduit. Pensez à le préciser dans votre commande.

Exemples :

Exécution d'un script dans un dossier spécial

*/15 * * * * /home/remi/bin/wallpaper

Exécution d'un script PHP

28 6 * * * /usr/bin/php /home/remi/bin/stats.php
Note tip.png Rapport d'exécution
Une tâche programmée est en principe muette. Si elle produit des messages, ceux-ci seront transmis par messagerie à l'utilisateur. Pensez à utiliser les redirections.

Exemples : Exécution d'un script avec conservation dans un journal

12 1 * * * /home/remi/bin/traitement &>home/remi/log/traitement.log

Exécution d'un script, les erreurs seront transmises par messagerie

12 1 * * * /home/remi/bin/traitement >/dev/null

Après avoir édité votre fichier crontab, on peut vouloir relancer le service crond avec la commande service crond restart (en super-utilisateur) mais ce n'est pas obligatoire car cron scrute chaque minute les répertoires /var/spool/cron et /var/spool/cron.d

Note tip.png Sécurité
Par défaut, tous les utilisateurs peuvent utiliser cron.

On peut contrôler l'accès à cron via les fichiers /etc/cron.allow et /etc/cron.deny, le premier listant les utilisateurs autorisés à utiliser cron et le second ceux qui ne le sont pas. L'absence d'un des deux fichiers ne pose aucun problème, d'ailleurs sous Fedora, seul le second existe. Leur modification n'exige pas le redémarrage du service crond.

Il existe d'autres gestionnaires de tâches automatisées comme anacron et at mais cela dépasse le cadre de ce tutoriel.

Pour éditer son fichier crontab à l'aide de vi, consulter : Utilisation de vi

5. Documentation