Tâches planifiées : cron
Automatiser des tâches récurrentes est au coeur de l'administration système. cron est le planificateur de référence sur Linux : il exécute des commandes selon un calendrier défini, sans intervention manuelle.
La syntaxe crontab
Une entrée cron suit ce format :
minute heure jour_du_mois mois jour_de_semaine commande
* * * * * commandeLe caractère * signifie "toutes les valeurs". Exemples :
0 2 * * * /usr/bin/backup.sh # tous les jours à 2h00
*/15 * * * * /usr/bin/check.sh # toutes les 15 minutes
0 9 * * 1 /usr/bin/report.sh # chaque lundi à 9h00
0 0 1 * * /usr/bin/monthly.sh # le 1er de chaque mois à minuitGérer sa crontab
crontab -e # éditer la crontab de l'utilisateur courant
crontab -l # afficher la crontab
crontab -r # supprimer la crontab (irréversible)
crontab -u romain -e # éditer la crontab d'un autre utilisateur (root)La crontab de chaque utilisateur est stockée dans /var/spool/cron/crontabs/.
Cron système : /etc/cron.d/
Pour les tâches système, on préfère les fichiers dans /etc/cron.d/. Ils ajoutent un champ utilisateur :
# /etc/cron.d/backup
0 3 * * * root /usr/local/bin/backup.shLes répertoires /etc/cron.daily/, /etc/cron.weekly/, /etc/cron.monthly/ acceptent des scripts directement, sans syntaxe cron : ils sont exécutés automatiquement aux fréquences correspondantes.
Variables d'environnement
L'environnement cron est épuré : pas de PATH complet, pas de variables utilisateur. Toujours utiliser des chemins absolus, et définir les variables nécessaires en tête de crontab :
SHELL=/bin/bash
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
MAILTO=admin@exemple.fr
0 4 * * * /usr/local/bin/backup.shsystemd timers
Sur les systèmes modernes, systemd timers remplacent avantageusement cron pour les services système : meilleure gestion des dépendances, logs via journald, exécution automatique après un raté. Cron reste pertinent pour les tâches utilisateur et les scripts simples.
systemctl list-timers # lister les timers actifs
systemctl list-timers --all # avec les timers inactifsEn pratique
Deux erreurs classiques avec cron : oublier les chemins absolus (/usr/bin/python3 et non python3), et ne pas gérer les sorties. Par défaut, cron envoie la sortie par email. Sur un serveur sans MTA configuré, elle disparaît silencieusement. Rediriger explicitement : commande >> /var/log/ma-tache.log 2>&1. Pour déboguer une crontab qui ne s'exécute pas : journalctl -u cron ou grep cron /var/log/syslog.