Linux / Comment utiliser Crontab
Sous Linux, l'utilisation de crontab vous permet d'exécuter des commandes ou des scripts de manière répétée à des horaires spécifiés. Avec crontab -e, vous pouvez modifier les tâches programmées de l'utilisateur actuel, en entrant cinq champs de temps et la commande à exécuter sur une seule ligne.
Différence entre cron et crontab
cron est un service qui vérifie et exécute régulièrement les tâches planifiées. crontab est une liste de tâches enregistrant les heures d'exécution et les commandes, généralement gérée séparément pour chaque utilisateur. Les exemples dans cet article sont basés sur le crontab utilisateur typique des séries Debian et Ubuntu. Les méthodes d'installation, les noms de services et les fonctionnalités prises en charge peuvent varier selon la distribution et l'implémentation de cron.
Les tâches planifiées sont exécutées avec les privilèges du propriétaire du crontab correspondant. Si des privilèges non détenus par l'utilisateur actuel sont nécessaires, définissez soigneusement le compte administrateur et le compte d'exécution, et ne créez pas de tâches avec des privilèges inutilement larges. Les tâches programmées pour un moment où l'ordinateur est éteint ou le service cron est arrêté ne seront pas exécutées.
Vérification et édition du Crontab
Dans le terminal, utilisez la commande suivante pour vérifier les tâches planifiées de l'utilisateur actuel. Si un message apparaît indiquant qu'il n'y a pas de liste, cela signifie que cet utilisateur n'a pas encore de crontab.
crontab -l
Pour ajouter ou modifier des tâches, exécutez la commande suivante. L'écran de sélection de l'éditeur peut apparaître la première fois que vous l'exécutez. Après avoir enregistré le fichier et quitté l'éditeur, cron vérifiera la syntaxe et installera la nouvelle liste. Si une erreur apparaît, modifiez-la à nouveau selon les instructions et confirmez que le message d'installation est affiché.
crontab -e
Les tâches planifiées pour le compte administrateur sont séparées de celles de l'utilisateur actuel. Modifiez uniquement la liste du root avec sudo crontab -e et vérifiez-la avec sudo crontab -l lorsque des privilèges administratifs sont nécessaires. Ne confondez pas les deux listes.
Pour supprimer une seule tâche, supprimez uniquement cette ligne avec crontab -e et enregistrez-la. crontab -r supprime l'ensemble de la liste des tâches planifiées de l'utilisateur actuel, donc vérifiez la liste avant de l'utiliser et faites-en une sauvegarde dans un endroit sûr si nécessaire. Vous pouvez la sauvegarder avec crontab -l > ~/crontab-backup.txt, et si une restauration est nécessaire, réinstallez l'ensemble du fichier avec crontab ~/crontab-backup.txt. La restauration écrasera la liste actuelle, donc vérifiez d'abord s'il y a des modifications.
Format de l'heure planifiée
Chaque tâche dans un crontab utilisateur se compose de cinq champs temporels suivis de la commande. Dans les fichiers crontab système tels que /etc/crontab ou /etc/cron.d/, un champ utilisateur supplémentaire pour l'exécution est ajouté entre les champs temporels et la commande, donc ne copiez pas le format ci-dessous tel quel.
minute hour day-of-month month day-of-week command
| Champ | Plage autorisée | Signification |
|---|---|---|
| minute | 0–59 | Minute |
| heure | 0–23 | Heure |
| jour-du-mois | 1–31 | Date |
| mois | 1–12 | Mois |
| jour-de-la-semaine | 0–7 | Jour de la semaine. 0 et 7 sont dimanche |
* fait référence à toutes les valeurs dans le champ. Une virgule spécifie plusieurs valeurs (10,20), un tiret spécifie une plage (1-5), et une barre oblique spécifie des intervalles dans une plage (*/10). Par exemple, */10 dans le champ minute signifie 0, 10, 20, 30, 40, 50 minutes chaque heure. Les intervalles sont interprétés dans chaque champ, donc ils ne garantissent pas toujours le même espacement basé sur le temps écoulé.
Si la date et le jour de la semaine sont tous deux restreints, cron sous Debian exécute la tâche lorsqu'une des deux conditions est remplie. Par exemple, 0 4 1 * 1 s'exécute à 4 heures du matin le premier jour du mois et chaque lundi, et pas seulement lorsque le premier est un lundi. Consultez man 5 crontab ou la documentation Debian sur le format crontab pour plus de détails.
Exemples de tâches planifiées
Remplacez /home/user/bin/backup.sh dans l'exemple suivant par le chemin absolu du script réel. L'utilisateur doit avoir accès au script et aux fichiers cibles, et s'il exécute le script directement, les permissions d'exécution et la spécification correcte de l'interpréteur sont également nécessaires. Tout d'abord, exécutez-le dans le terminal avec le même compte pour vérifier les résultats.
0 4 * * * /home/user/bin/backup.sh
0 4 * * 1-5 /home/user/bin/backup.sh
*/10 4 * * * /home/user/bin/backup.sh
La première ligne s'exécute tous les jours à 4 heures du matin, la deuxième ligne s'exécute du lundi au vendredi à 4 heures du matin, et la troisième ligne s'exécute toutes les 10 minutes de 4 heures à 4h50. Les exemples sont des horaires indépendants. Lorsque tous sont saisis, toutes les tâches de chaque ligne seront enregistrées.
Enregistrez et testez un travail en toute sécurité
Lors de la pratique, au lieu d'une sauvegarde réelle, essayez d'utiliser une tâche qui laisse un enregistrement dans le répertoire personnel de l'utilisateur actuel.
- Exécutez
crontab -e, ajoutez la ligne unique suivante, puis enregistrez et quittez. La date et l'heure seront ajoutées au fichier chaque minute.
* * * * * /bin/date >> "$HOME/cron-test.log" 2>&1
- Exécutez
crontab -lpour vérifier l'entrée installée. Après 1 à 2 minutes, exécutezcat ~/cron-test.loget vérifiez qu'un enregistrement a été ajouté. - Une fois confirmé, supprimez uniquement l'entrée de pratique avec
crontab -eet enregistrez. Vous pouvez supprimer le fichier journal après avoir vérifié son contenu.
Si la pratique ne fonctionne pas, vérifiez si le service cron est installé et en cours d'exécution. Dans un paquet cron typique d'Ubuntu, vous pouvez voir le statut avec systemctl status cron. Le nom du service et l'emplacement du journal varient selon la distribution, et dans un environnement Ubuntu utilisant le journal systemd, vous pouvez consulter les journaux du service avec journalctl -u cron.
Points à vérifier lorsque cela ne fonctionne pas
cron peut s'exécuter dans un environnement différent du shell de connexion. Spécifiez les commandes et les scripts avec des chemins absolus autant que possible, et définissez clairement les variables d'environnement nécessaires ainsi que les répertoires de travail dans le script. Pour vérifier les erreurs, vous pouvez également rediriger la sortie et les erreurs du travail vers un fichier journal accessible par l'utilisateur. Comme les journaux peuvent contenir des informations sensibles, soyez prudent avec les permissions d'accès et les périodes de conservation.
Vérifiez si l'heure système et le fuseau horaire sont corrects, si le compte d'exécution peut accéder aux fichiers, et s'il existe une possibilité d'exécutions qui se chevauchent. Le % utilisé dans les commandes est traité de manière spéciale par cron, donc pour le passer littéralement, il faut généralement l'échapper avec \%. Consultez la documentation du cron que vous utilisez pour le comportement exact.




