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.
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
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
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)
* * * * * /home/user/mon_script.sh
30 2 * * * /home/user/backup.sh
*/5 * * * * /home/user/clean_tmp.sh
10 3 * * 1 /home/user/rapport.sh
0 6 * * 1-5 /home/user/travail.sh
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
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
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
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.
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.
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.
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.
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 :