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 :
- Une sauvegarde de base de données tous les jours à 2h du matin.
- L'envoi d'un rapport système par e-mail tous les lundis.
- Le nettoyage de certains répertoires temporaires à intervalles réguliers.
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
- Si le service est inactif, vous pouvez le démarrer et l'activer au démarrage du système :
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
- La première fois que vous lancez cette commande, il vous sera peut-être demandé de choisir un éditeur (nano, vim, etc.).
- Une fois l'éditeur ouvert, vous pouvez renseigner vos tâches.
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)
- Les valeurs minutes, heures, jours du mois, mois et jours de la semaine sont spécifiées à l'aide d'entiers.
- Le caractère * (astérisque) signifie « chaque valeur possible ». Par exemple, * dans le champ des minutes veut dire « toutes les minutes ».
- Vous pouvez utiliser le trait d'union (-) pour spécifier une plage (par ex. 1-5 pour 1,2,3,4,5).
- Vous pouvez utiliser la virgule (,) pour énumérer plusieurs valeurs (par ex. 0,15,30,45 dans la colonne des minutes pour exécuter la tâche toutes les 15 minutes).
- Vous pouvez utiliser la barre oblique (/) pour indiquer un pas. Par exemple, */2 dans la colonne des minutes pour exécuter la tâche toutes les 2 minutes.
- Les jours de la semaine peuvent être spécifiés par un chiffre (0-7) ou par leurs abréviations (mon, tue, wed, etc.).
4. Exemples de crontab
4.1. Exemple simple : exécution toutes les minutes
* * * * * /home/user/mon_script.sh
- Exécute le script mon_script.sh toutes les minutes.
4.2. Exemple : exécuter une tâche tous les jours à 2h30 du matin
30 2 * * * /home/user/backup.sh
- À 2h30 tous les jours, backup.sh sera exécuté.
4.3. Exemple : exécuter une tâche toutes les 5 minutes
*/5 * * * * /home/user/clean_tmp.sh
- Toutes les 5 minutes, clean_tmp.sh est lancé.
4.4. Exemple : exécuter une tâche chaque lundi à 3h10 du matin
10 3 * * 1 /home/user/rapport.sh
- Le champ "jour de la semaine" est 1 pour lundi (avec la convention 0 ou 7 = dimanche).
- À 3h10 du matin, chaque lundi, rapport.sh est exécuté.
4.5. Exemple : exécuter une tâche du lundi au vendredi à 6h00
0 6 * * 1-5 /home/user/travail.sh
- Tous les jours ouvrés (du lundi=1 au vendredi=5) à 6h du matin.
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.
- Si vous souhaitez ignorer les e-mails, vous pouvez rediriger les sorties vers /dev/null.
Par exemple :
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 :
- Les e-mails envoyés à l'utilisateur si le système de mail local est configuré.
- Les journaux du système :
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 :
- /etc/cron.daily : exécutés tous les jours
- /etc/cron.weekly : exécutés toutes les semaines
- /etc/cron.hourly : exécutés toutes les heures
- /etc/cron.monthly : exécutés tous les mois
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.
- Par exemple, si vous avez un ordinateur portable éteint la nuit et que vous programmez une tâche à 3h00, anacron pourra l'exécuter à la prochaine opportunité quand la machine sera rallumée.
- Sur un serveur fonctionnant 24h/24, anacron est moins indispensable, sauf si vous pouvez plus de garanties.
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é
- Toujours tester vos scripts en ligne de commande avant de les mettre dans un crontab.
- Utilisez des chemins absolus pour les commandes et scripts.
- Redirigez les sorties (ou configure un mail local) pour diagnostiquer rapidement les problèmes.
- Vérifiez régulièrement /var/log/syslog ou journalctl -u cron pour vous assurer que tout se passe bien.
- Créez des logs pour vos tâches critiques.
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 :
- Installation et vérification du service (apt install cron, systemctl status cron).
- Édition d'une crontab avec la commande crontab -e.
- Syntaxe : minute heure jour-du-mois mois jour-de-la-semaine commande.
- Logs et redirections pour le suivi et la maintenance.
↑ Haut de page