Un administrateur système Linux expérimenté connaît l'importance d'exécuter automatiquement les tâches de maintenance de routine en arrière-plan.
L'utilitaire Linux Cron est un moyen efficace de planifier une tâche d'arrière-plan de routine à une heure et/ou un jour spécifiques de manière continue.
Cet article fait partie de la série en cours Productivity Tips For Geeks. Dans cet article, passons en revue 15 exemples impressionnants de planification de tâches crontab.
Format Crontab Linux
MIN HOUR DOM MON DOW CMD
Champ | Description | Valeur autorisée |
---|---|---|
MIN | Champ des minutes | 0 à 59 |
HEURE | Champ heure | 0 à 23 |
DOM | Jour du mois | 1-31 |
LUN | Champ Mois | 1-12 |
DOW | Jour de la semaine | 0-6 |
CMD | Commande | Toute commande à exécuter. |
1. Planification d'une tâche à une heure précise
L'utilisation de base de cron consiste à exécuter une tâche dans un délai précis, comme indiqué ci-dessous. Cela exécutera le script shell de sauvegarde complète (full-backup) le 10 juin à 08h30 .
Veuillez noter que le champ de l'heure utilise le format 24 heures. Ainsi, pour 8h00, utilisez 8 et pour 20h00, utilisez 20.
30 08 10 06 * /home/ramesh/full-backup
- 30 – 30e minute
- 08 – 08h00
- 10 – 10ème jour
- 06 – 6ème mois (juin)
- * – Tous les jours de la semaine
2. Planifier une tâche pour plusieurs instances (par exemple, deux fois par jour)
Le script suivant effectue une sauvegarde incrémentielle deux fois par jour tous les jours.
Cet exemple exécute le script shell de sauvegarde incrémentielle spécifié (incremental-backup) à 11h00 et 16h00 tous les jours. La valeur séparée par des virgules dans un champ spécifie que la commande doit être exécutée dans tout le temps mentionné.
00 11,16 * * * /home/ramesh/bin/incremental-backup
- 00 – 0ème minute (haut de l'heure)
- 11,16 – 11h et 16h
- * – Tous les jours
- * – Tous les mois
- * – Tous les jours de la semaine
3. Planifier une tâche pour une plage horaire spécifique (par exemple, uniquement les jours de semaine)
Si vous souhaitez qu'une tâche soit planifiée pour chaque heure dans une plage de temps spécifique, utilisez ce qui suit.
Cron Job tous les jours pendant les heures de travail
Cet exemple vérifie l'état de la base de données tous les jours (y compris les week-ends) pendant les heures de travail de 9h00 à 18h00
00 09-18 * * * /home/ramesh/bin/check-db-status
- 00 – 0ème minute (haut de l'heure)
- 09-18 – 9h, 10h, 11h, 12h, 13h, 14h, 15h, 16h, 17h, 18h
- * – Tous les jours
- * – Tous les mois
- * – Tous les jours de la semaine
Cron Job tous les jours de la semaine pendant les heures de travail
Cet exemple vérifie l'état de la base de données tous les jours de la semaine (c'est-à-dire à l'exception du samedi et du dimanche) pendant les heures de travail de 9 h 00 à 18 h 00.
00 09-18 * * 1-5 /home/ramesh/bin/check-db-status
- 00 – 0ème minute (haut de l'heure)
- 09-18 – 9h, 10h, 11h, 12h, 13h, 14h, 15h, 16h, 17h, 18h
- * – Tous les jours
- * – Tous les mois
- 1-5 -Lun, mar, mer, jeu et ven (tous les jours de la semaine)
4. Comment afficher les entrées Crontab ?
Afficher les entrées Crontab de l'utilisateur actuellement connecté
Pour afficher vos entrées crontab, tapez crontab -l à partir de votre compte unix, comme indiqué ci-dessous.
ramesh@dev-db$ crontab -l @yearly /home/ramesh/annual-maintenance */10 * * * * /home/ramesh/check-disk-space [Note: This displays crontab of the current logged in user]
Afficher les entrées de la Crontab racine
Connectez-vous en tant qu'utilisateur root (su - root) et faites crontab -l comme indiqué ci-dessous.
root@dev-db# crontab -l no crontab for root
Crontab HowTo :Afficher les entrées Crontabs d'autres utilisateurs Linux
Pour afficher les entrées crontab d'autres utilisateurs Linux, connectez-vous à root et utilisez -u {username} -l comme indiqué ci-dessous.
root@dev-db# crontab -u sathiya -l @monthly /home/sathiya/monthly-backup 00 09-18 * * * /home/sathiya/check-db-status
5. Comment modifier les entrées Crontab ?
Modifier les entrées Crontab de l'utilisateur actuellement connecté
Pour modifier une entrée crontab, utilisez crontab -e comme indiqué ci-dessous. Par défaut, cela modifiera la crontab des utilisateurs actuellement connectés.
ramesh@dev-db$ crontab -e @yearly /home/ramesh/centos/bin/annual-maintenance */10 * * * * /home/ramesh/debian/bin/check-disk-space ~ "/tmp/crontab.XXXXyjWkHw" 2L, 83C [Note: This will open the crontab file in Vim editor for editing. Please note cron created a temporary /tmp/crontab.XX... ]
Lorsque vous enregistrez le fichier temporaire ci-dessus avec :wq, il enregistre la crontab et affiche le message suivant indiquant que la crontab a été modifiée avec succès.
~ "crontab.XXXXyjWkHw" 2L, 83C written crontab: installing new crontab
Modifier les entrées de la Crontab racine
Connectez-vous en tant qu'utilisateur root (su - root) et faites crontab -e comme indiqué ci-dessous.
root@dev-db# crontab -e
Modifier les entrées du fichier Crontab d'autres utilisateurs Linux
Pour modifier les entrées crontab d'autres utilisateurs Linux, connectez-vous à root et utilisez -u {username} -e comme indiqué ci-dessous.
root@dev-db# crontab -u sathiya -e @monthly /home/sathiya/fedora/bin/monthly-backup 00 09-18 * * * /home/sathiya/ubuntu/bin/check-db-status ~ ~ ~ "/tmp/crontab.XXXXyjWkHw" 2L, 83C
6. Planifiez une tâche pour chaque minute à l'aide de Cron.
Idéalement, vous n'aurez peut-être pas l'obligation de planifier une tâche toutes les minutes. Mais comprendre cet exemple vous aidera à comprendre les autres exemples mentionnés ci-dessous dans cet article.
* * * * * CMD
Le * signifie toutes les unités possibles - c'est-à-dire chaque minute de chaque heure tout au long de l'année. Plus que d'utiliser ce * directement, vous le trouverez très utile dans les cas suivants.
- Lorsque vous spécifiez */5 dans le champ des minutes, cela signifie toutes les 5 minutes.
- Lorsque vous spécifiez 0-10/2 dans le champ des minutes, cela signifie toutes les 2 minutes au cours des 10 premières minutes.
- Ainsi, la convention ci-dessus peut être utilisée pour les 4 autres champs.
7. Planifiez une tâche Cron en arrière-plan toutes les 10 minutes.
Utilisez ce qui suit si vous souhaitez vérifier l'espace disque toutes les 10 minutes.
*/10 * * * * /home/ramesh/check-disk-space
Il exécute la commande spécifiée check-disk-space toutes les 10 minutes tout au long de l'année. Mais vous devrez peut-être exécuter la commande uniquement pendant les heures de bureau ou vice versa. Les exemples ci-dessus montrent comment faire ces choses.
Au lieu de spécifier des valeurs dans les 5 champs, nous pouvons le spécifier en utilisant un seul mot-clé comme mentionné ci-dessous.
Il existe des cas particuliers dans lesquels au lieu des 5 champs ci-dessus, vous pouvez utiliser @ suivi d'un mot-clé, comme redémarrage, minuit, annuel, horaire.
Mot clé | Équivalent |
---|---|
@annuel | 0 0 1 1 * |
@quotidien | 0 0 * * * |
@horaire | 0 * * * * |
@reboot | Exécuter au démarrage. |
8. Planifiez une tâche pour la première minute de chaque année en utilisant @yearly
Si vous souhaitez qu'un travail soit exécuté à la première minute de chaque année, vous pouvez utiliser le @yearly cron comme indiqué ci-dessous.
Cela exécutera la maintenance annuelle du système à l'aide du script shell de maintenance annuelle à 00h00 le 1er janvier de chaque année.
@yearly /home/ramesh/red-hat/bin/annual-maintenance
9. Planifiez une tâche Cron au début de chaque mois en utilisant @monthly
Il est aussi similaire que le @yearly comme ci-dessus. Mais exécute la commande une fois par mois en utilisant @monthly mot-clé cron.
Cela exécutera la sauvegarde sur bande du script shell à 00h00 le 1er de chaque mois.
@monthly /home/ramesh/suse/bin/tape-backup
10. Planifiez une tâche en arrière-plan tous les jours en utilisant @daily
Utiliser le @quotidien cron, cela effectuera un nettoyage quotidien du fichier journal à l'aide du script shell cleanup-logs à 00h00 tous les jours.
@daily /home/ramesh/arch-linux/bin/cleanup-logs "day started"
11. Comment exécuter une commande Linux après chaque redémarrage à l'aide de @reboot ?
Utilisation de @reboot cron, cela exécutera la commande spécifiée une fois après le démarrage de la machine à chaque fois.
@reboot CMD
12. Comment désactiver/rediriger la sortie du courrier Crontab à l'aide du mot-clé MAIL ?
Par défaut, crontab envoie la sortie du travail à l'utilisateur qui a planifié le travail. Si vous souhaitez rediriger la sortie vers un utilisateur spécifique, ajoutez ou mettez à jour la variable MAIL dans la crontab comme indiqué ci-dessous.
ramesh@dev-db$ crontab -l MAIL="ramesh" @yearly /home/ramesh/annual-maintenance */10 * * * * /home/ramesh/check-disk-space [Note: Crontab of the current logged in user with MAIL variable]
Si vous souhaitez que le courrier ne soit envoyé nulle part, c'est-à-dire pour que la sortie de la crontab ne soit pas envoyée par e-mail, ajoutez ou mettez à jour la variable MAIL dans la crontab comme indiqué ci-dessous.
MAIL=""
13. Comment exécuter une tâche Linux Cron chaque seconde à l'aide de Crontab.
Vous ne pouvez pas planifier une tâche cron toutes les secondes. Parce que dans cron, l'unité minimale que vous pouvez spécifier est la minute. Dans un scénario typique, il n'y a aucune raison pour la plupart d'entre nous d'exécuter une tâche chaque seconde dans le système.
14. Spécifiez la variable PATH dans la Crontab
Dans tous les exemples ci-dessus, nous avons spécifié le chemin absolu de la commande Linux ou du script shell qui doit être exécuté.
Par exemple, au lieu de spécifier /home/ramesh/tape-backup, si vous souhaitez simplement spécifier tape-backup, ajoutez le chemin /home/ramesh à la variable PATH dans la crontab, comme indiqué ci-dessous.
ramesh@dev-db$ crontab -l PATH=/bin:/sbin:/usr/bin:/usr/sbin:/home/ramesh @yearly annual-maintenance */10 * * * * check-disk-space [Note: Crontab of the current logged in user with PATH variable]
15. Installer Crontab à partir d'un fichier Cron
Au lieu de modifier directement le fichier crontab, vous pouvez également ajouter d'abord toutes les entrées à un fichier cron. Une fois que vous avez toutes ces entrées dans le fichier, vous pouvez les télécharger ou les installer sur le cron comme indiqué ci-dessous.
ramesh@dev-db$ crontab -l no crontab for ramesh $ cat cron-file.txt @yearly /home/ramesh/annual-maintenance */10 * * * * /home/ramesh/check-disk-space ramesh@dev-db$ crontab cron-file.txt ramesh@dev-db$ crontab -l @yearly /home/ramesh/annual-maintenance */10 * * * * /home/ramesh/check-disk-space
Remarque : Cela installera le fichier cron-file.txt sur votre crontab, ce qui supprimera également vos anciennes entrées cron. Soyez donc prudent lorsque vous téléchargez des entrées cron à partir d'un fichier cron-file.txt.
Didacticiels Cron supplémentaires
- Cron Vs Anacron :Comment configurer Anacron sous Linux (avec un exemple)
- Comment exécuter Cron toutes les 5 minutes, secondes, heures, jours, mois
- 6 exemples de commandes Linux Crontab
- Comment installer, modifier ou supprimer des tâches Cron en mode batch
- Comprendre les commandes at, atq, atrm, batch à l'aide de 9 exemples
Des articles Linux géniaux
Voici quelques exemples impressionnants de 15 articles qui pourraient vous être utiles.
- Maman, je l'ai trouvé ! - 15 exemples pratiques de commande de recherche Linux
- 15 exemples pour maîtriser l'historique de la ligne de commande Linux
- Commande LS Unix :15 exemples pratiques
- Maîtrisez le Grep ! – 15 exemples pratiques de commandes Grep