Le système GNU/Linux prend en charge plusieurs utilitaires pour planifier les tâches. L'utilitaire cron est le plus largement pris en charge. Il vous permet de programmer des tâches à exécuter en arrière-plan à intervalles réguliers. L'utilitaire cron utilise une table (crontab) avec une liste de scripts ou de commandes à exécuter et l'heure à laquelle ils doivent être exécutés.
Planification des tâches
Les utilisateurs normaux peuvent utiliser la commande crontab pour gérer leurs travaux. Cette commande peut être appelée de quatre manières différentes :
Commande | Fonction |
---|---|
crontab -l | Liste des travaux pour l'utilisateur actuel |
crontab -r | Supprimer toutes les tâches des utilisateurs actuels. |
crontab -e | Modifier les travaux pour l'utilisateur actuel. |
crontab [nom de fichier] | Supprimez tous les travaux et remplacez-les par les travaux lus à partir de [nom de fichier]. Si aucun fichier n'est spécifié, stdin sera utilisé. |
Comment modifier et afficher la crontab
Lors de la modification de travaux avec le "crontab -e “, un éditeur sera démarré (vi par défaut. sauf si la variable d'environnement EDITOR a été définie sur quelque chose de différent). Le fichier en cours d'édition aura un travail par ligne. Les lignes vides sont autorisées et les commentaires commencent leur ligne par un symbole dièse (#).
# crontab -e
Lorsque vous exécutez la commande "crontab -e" sans aucune option, la crontab de l'utilisateur actuellement connecté sera éditée par défaut. Pour modifier la crontab d'un autre utilisateur, vous pouvez utiliser l'option -u avec la commande crontab. Par exemple, pour éditer la crontab de l'utilisateur john.
# crontab -u john -e
De même, pour afficher la crontab de l'utilisateur actuel, utilisez la commande "crontab -l ” commande.
# crontab -l
Et pour lister la crontab d'un utilisateur spécifique, utilisez la commande ci-dessous.
# crontab -u john -l
Fichiers de configuration Cron
Le processus d'arrière-plan cron est principalement inactif. Il se réveille une fois par minute et vérifie /etc/crontab, /etc/cron.d et les fichiers de la table cron de l'utilisateur et détermine s'il y a des travaux qui doivent être exécutés.
Le tableau ci-dessous résume le but des différents fichiers et répertoires utilisés par cron. La connaissance de ces fichiers et répertoires vous aidera à résoudre les problèmes et à comprendre cron plus en détail.
Fichier | Objectif |
---|---|
/etc/init.d/crond | Démarre le démon cron au démarrage du système. |
/var/log/cron | Messages système liés au processus cron. Utile pour résoudre les problèmes. |
/var/spool/cron/[nom d'utilisateur] | Les fichiers crontab utilisateurs sont stockés dans le répertoire /var/spool/cron. |
/etc/cron.allow | Spécifie les utilisateurs qui peuvent créer une table cron. |
/etc/cron.deny | Spécifie les utilisateurs qui ne sont pas autorisés à créer une table cron. |
/etc/crontab | La table cron du système qui contient des commandes pour exécuter des scripts situés dans les répertoires suivants : /etc/cron.hourly, /etc/cron.daily, /etc/cron.weekly et /etc/cron.monthly. |
/etc/cron.d | Un répertoire contenant des tables cron pour les tâches qui doivent s'exécuter selon un calendrier autre qu'horaire, quotidien, hebdomadaire ou mensuel. |
/etc/cron.hourly | Répertoire contenant les scripts système à exécuter toutes les heures. |
/etc/cron.daily | Répertoire contenant les scripts système à exécuter quotidiennement. |
/etc/cron.weekly | Répertoire contenant les scripts système à exécuter sur une base hebdomadaire. |
/etc/cron.monthly | Répertoire contenant les scripts système à exécuter sur une base mensuelle. |
Syntaxe Crontab
Les travaux des utilisateurs individuels sont stockés dans le répertoire /var/spool/cron dans des fichiers correspondant aux noms d'utilisateur. Ces fichiers appartiennent toujours à l'utilisateur root. Les fichiers dans /var/spool/cron ne sont pas modifiés directement. Au lieu de cela, un programme appelé crontab est utilisé pour les manipuler. La figure ci-dessous montre la syntaxe d'une tâche cron.
Chaque ligne d'un fichier définit une tâche. Il y a 6 champs dans une ligne. Les 5 premiers champs définissent l'heure, le dernier champ contient la commande à exécuter. Il peut s'agir de n'importe quel type de commande ou de script shell. Les 5 premiers champs ont le format suivant :
Champ | Plage |
---|---|
Minutes | 0-59 |
Heures | 0-23 |
Jour du mois | 1-31 |
Mois | 0-12 |
Jour de semaine | 0-7 |
Exemples de tâches cron
1. Planifier un travail au 2 février de chaque année
Vous devez exécuter un script de sauvegarde une fois par an à une date précise du mois de février. La syntaxe est illustrée ci-dessous.
0 9 2 2 * /usr/local/bin/yearly_backup
2. Planifiez une tâche toutes les heures à la cinquième minute, tous les jours
Utilisez la commande suivante pour exécuter un script toutes les heures à la cinquième minute, tous les jours :
5 * * * * $HOME/bin/daily.job >> $HOME/tmp/out 2>&1
3. Planifiez une tâche 5 minutes après minuit tous les jours
Utilisez la commande suivante pour exécuter 5 minutes après minuit tous les jours :
5 0 * * * $HOME/bin/daily.job >> $HOME/tmp/out 2>&1
4. Planifiez une tâche à une heure précise le premier de chaque mois
Utilisez la commande suivante pour exécuter à 14h15. le premier de chaque mois :
15 14 1 * * * $HOME/bin/monthly
5. Planifier une tâche à une heure précise uniquement les jours de semaine (exclure le samedi et le dimanche)
Utilisez la commande suivante pour exécuter à 22 h. en semaine :
0 22 * * 1-5 $HOME/bin/weekday.job >> $HOME/tmp/out 2>&1
6. Planification de plusieurs tâches dans une seule tâche cron
Nous pouvons également planifier plusieurs tâches dans une seule tâche cron en utilisant des tâches séparées par un point-virgule (;) comme indiqué ci-dessous :
0 12 * * * /var/tmp/script01.sh; /var/tmp/script02.sh
7. Utilisation de plages pour spécifier les heures de début
Les plages peuvent être spécifiées à l'aide d'un trait d'union. Une valeur de 1 à 5 indique que ce champ est valide pour les nombres 1 à 5. Si vous utilisez un nom au lieu d'un nombre, vous ne pouvez pas spécifier de plage. Un exemple de spécification de plages est illustré ci-dessous. La tâche est planifiée pour s'exécuter toutes les heures à partir de 15 h 00. Jusqu'à 22h
* 3-10 * * * /var/tmp/script.sh
8. Utilisation des valeurs de pas pour spécifier les heures de début
Les valeurs de pas peuvent être utilisées conjointement avec des plages. Pour spécifier une valeur de pas, faites suivre la plage d'une barre oblique (/) et d'un nombre. Le nombre spécifié est la valeur du pas. Par exemple, ce qui suit spécifie qu'une valeur sur trois (dans ce cas, 2, 5, 8 et 11) doit correspondre :
* 0-12/3 * * * /var/tmp/script.sh
Les valeurs de pas peuvent également être utilisées avec des astérisques. La valeur */3 dans le champ de l'heure correspondrait toutes les trois heures (0, 3, 6, 9, 12, 15, 18 et 21).
9. Utiliser des listes pour spécifier les heures de début
Les listes sont également acceptables; chaque élément d'une liste est séparé par une virgule. Il est courant d'utiliser des listes en conjonction avec des plages, comme ceci :
1-15,31-45 * * * * /var/tmp/script.sh
Cet exemple correspond à tous les nombres (minutes dans notre cas) de 1 à 15 et de 31 à 45. Si vous utilisez un nom au lieu d'un nombre, vous ne pouvez pas spécifier de liste.
10. Planifiez une tâche à 4h45, les 1er, 10 et 22 de chaque mois
Vous trouverez ci-dessous un exemple d'exécution d'une tâche à une heure précise sur quelques jours spécifiques du mois.
45 4 1,10,22 * * /apps/bin/backup.sh
Macro Crontab
Nous pouvons ajouter des macros dans le fichier crontab. Par exemple, utilisez ce qui suit pour redémarrer "my_script" après chaque redémarrage :
@reboot /var/tmp/my_script
Voici un résumé de quelques macros supplémentaires :
Entrée | Description | Équivalent à |
---|---|---|
@reboot | Exécuter une fois au démarrage | Aucun |
@hebdomadaire | Exécuter une fois par semaine | 0 0 * * 0 |
@quotidien | Exécuter une fois par jour | 0 0 * * * |
@minuit | (identique à @daily) | 0 0 * * * |
@horaire | Exécuter une fois par heure | 0 * * * * |
Traitement de la sortie
Un script imprime souvent quelque chose à l'écran, soit pour le débogage, les mises à jour de statut, soit pour consigner une erreur. Tout ce qu'un travail imprime à l'écran est envoyé dans un e-mail à l'utilisateur actuel, qui peut être remplacé par la variable MAILTO dans la crontab.
# crontab -l MAIL=john 0 2 * * * /apps/bin/backup.shComment planifier des tâches avec Cron sous Linux
Définition des tâches système à l'aide de Cron sous Linux
UNIX / Linux :Comment crontab valide l'accès en fonction des fichiers cron.allow et cron.deny
CentOS / RHEL :bases d'anacron (Qu'est-ce qu'anacron et comment le configurer)
CentOS / RHEL :Guide du débutant pour cron