Utiliser le planificateur de tâches sur Linux/BSD/Unix : cron

1. Qu'est-ce que cron ?

cron est un planificateur de tâches sous Unix/Linux. Il permet d'exécuter automatiquement des commandes ou des scripts à des intervalles programmés. Par exemple, vous pouvez automatiser :

crond est le démon (service) qui tourne en arrière-plan et qui se charge de lancer les tâches programmées.


2. Installer et vérifier le service cron sur Debian

Sur la plupart des distributions Debian (ou basées sur Debian comme Ubuntu), cron est généralement installé par défaut.
Pour s'en assurer ou l'installer si besoin, exécutez :

sudo apt update
sudo apt install cron

Une fois installé, vérifiez que le service est actif :

sudo systemctl status cron
sudo systemctl start cron
sudo systemctl enable cron

3. Les bases de la configuration : le fichier crontab

3.1. Principe du fichier crontab

crontab est l'outil qui permet de gérer les tâches planifiées.
Chaque utilisateur a son propre fichier crontab, ce qui permet à chacun d'automatiser des tâches sans interférer avec les autres utilisateurs.

Le fichier crontab d'un utilisateur s'édite via la commande :

crontab -e

3.2. Syntaxe d'une ligne crontab

La structure d'une ligne standard dans un fichier crontab s'écrit comme suit :

* * * * * commande
┬ ┬ ┬ ┬ ┬
| | | | └ Jour de la semaine (0 - 7) (0 ou 7 = dimanche)
| | | └──── Mois (1 - 12)
| | └─────── Jour du mois (1 - 31)
| └────────── Heure (0 - 23)
└───────────── Minute (0 - 59)

4. Exemples de crontab

4.1. Exemple simple : exécution toutes les minutes

* * * * * /home/user/mon_script.sh

4.2. Exemple : exécuter une tâche tous les jours à 2h30 du matin

30 2 * * * /home/user/backup.sh

4.3. Exemple : exécuter une tâche toutes les 5 minutes

*/5 * * * * /home/user/clean_tmp.sh

4.4. Exemple : exécuter une tâche chaque lundi à 3h10 du matin

10 3 * * 1 /home/user/rapport.sh

4.5. Exemple : exécuter une tâche du lundi au vendredi à 6h00

0 6 * * 1-5 /home/user/travail.sh

5. Particularités et bonnes pratiques

5.1. Redirection de la sortie

Par défaut, cron envoie la sortie standard et la sortie d'erreur (stdout et stderr) par e-mail à l'utilisateur propriétaire de la tâche, s'il y a un système de mail configuré sur la machine.

30 2 * * * /home/user/backup.sh > /dev/null 2>&1

Ou bien, vous pouvez stocker les logs de la commande dans un fichier :

30 2 * * * /home/user/backup.sh >> /home/user/logs/backup.log 2>&1

5.2. Utiliser des chemins absolus

Il est important d'utiliser des chemins absolus (et non relatifs) dans votre script et vos commandes, car cron ne connaît pas l'environnement de votre utilisateur (variables PATH, etc.).
Exemple :

* * * * * /usr/bin/python3 /home/user/scripts/mon_script.py

5.3. Vérifier la bonne exécution (logs)

Pour vérifier que votre job cron s'exécute correctement, vous pouvez consulter :

sudo journalctl -u cron

Ou le fichier /var/log/syslog sur Debian, dans lequel cron enregistre ses actions :

grep CRON /var/log/syslog

5.4. Éviter les conflits de scripts

Si vous avez plusieurs tâches planifiées susceptibles de s'exécuter en même temps, veillez à ce qu'elles n'entrent pas en conflit (par exemple, deux backups lancés simultanément). Vous pouvez gérer ça en mettant en place des verrous, ou en utilisant des gestionnaires plus avancés comme systemd timers, ou Anacron pour les tâches critiques.


6. Les différents emplacements de scripts cron

6.1. /etc/crontab

Ce fichier appartient au système. Vous pouvez y trouver des tâches spéciales, ou en ajouter.
La syntaxe est quasiment la même, sauf qu'il inclut un champ supplémentaire pour spécifier l'utilisateur qui exécutera la commande :

* * * * * utilisateur commande

Note : Éditer directement /etc/crontab est possible, mais il est souvent conseillé d'utiliser crontab -e ou les répertoires /etc/cron.* pour une gestion plus fine et éviter les conflits.

6.2. Les répertoires /etc/cron.daily, /etc/cron.weekly, /etc/cron.hourly, /etc/cron.monthly

Debian (et la plupart des distributions Linux) propose des répertoires prévus pour exécuter automatiquement tous les scripts qu'ils contiennent :

Vous pouvez simplement déposer vos scripts exécutables dans ces dossiers. La planification exacte dépend généralement du contenu de /etc/crontab qui appelle ces répertoires à des horaires déterminés.


7. Utiliser anacron en complément

anacron est un outil complémentaire à cron qui permet d'exécuter des tâches manquées si le système était éteint à l'heure prévue.

Pour l'installer sous Debian :

sudo apt update
sudo apt install anacron

Puis vous pouvez configurer les tâches dans /etc/anacrontab.


8. Conseils et résumé


9. Conclusion

cron est un outil puissant et incontournable sur un serveur ou même sur une machine personnelle pour automatiser des tâches répétitives. Sur Debian, son fonctionnement est simple : le démon crond tourne en permanence et lit les fichiers crontab des utilisateurs ainsi que ceux du système. En suivant les bonnes pratiques, vous pourrez bénéficier d'un environnement automatisé et fiable.

Points-clés à retenir :


⬆️ Retour en haut de la page