Explorons la crontab, ses commandes et les différentes opérations associées à la crontab.
Nous apprendrons à programmer des tâches à l’aide de l’utilitaire cron et, enfin, nous aborderons certains outils en ligne qui nous aident à formater et à tester les commandes cron.
Origine
Crontab signifie“table cron“. Le mot cron vient du mot grec Chronos qui signifie temps. Crontab est un processus démon du système qui exécute automatiquement certaines tâches et travaux à l’heure prévue.
Cas d’utilisation
Crontab est utile pour effectuer diverses opérations telles que la gestion des sauvegardes automatisées, la rotation des fichiers journaux, la synchronisation des fichiers entre les machines distantes et l’effacement des dossiers temporaires, etc. Crontab peut être utilisé pour n’importe quel type de travail, mais il devient particulièrement utile lorsque nous commençons à traiter des travaux de type administration système.
En utilisant cron, un administrateur peut programmer l’exécution d’une tâche à une heure et un jour précis.
Voyons donc comment nous pouvons mettre cela en place.
Syntaxe de Crontab
Pour exécuter une liste de commandes, l’utilitaire cron lit les fichiers de configuration. Pour interpréter les lignes des tables de configuration crontab, il suit la syntaxe Crontab. Crontab comporte six champs, dont les cinq premiers (1-5) définissent la date et l’heure d’exécution. Le dernier champ, c’est-à-dire le sixième, peut être un nom d’utilisateur et/ou une tâche /job/commande/script à exécuter.
* * * * * NOM_UTILISATEUR COMMANDE/SCRIPT-À-EXÉCUTER
│ │ │ │ │
│ │ │ │ │
│ │ │ |_ ________ Jour de la semaine (0 – 6) (0 est le dimanche, ou utilisez des noms)
│ │ │ |____________ Mois (1 – 12),* signifie chaque mois
│ │ |______________ Jour du mois (1 – 31),* signifie chaque jour
│ |________________ Heure (0 – 23),* signifie chaque heure
|___________________ Minute (0 – 59), * signifie chaque minute
Notes:
- L’astérisque (*) est utilisé pour faire correspondre toutes les valeurs possibles d’un champ. Par exemple, un astérisque utilisé dans le champ heure équivaut à toutes les heures ou un astérisque dans le champ mois équivaut à tous les mois.
- username est facultatif (disponible uniquement s’il s’agit du fichier crontab du système)
Exemples :
Comprenons la syntaxe ci-dessus à l’aide de quelques exemples
1. Programmez un cron pour qu’il s’exécute tous les jours à 5 heures du matin
0 5 * * * /scripts/job.sh
2. Programmez un cron pour qu’il s’exécute deux fois par jour à 6 heures du matin et à 6 heures du soir
0 6,18 * * * /scripts/job.sh
3. Programmez un cron pour qu’il s’exécute toutes les minutes
* * * * * /scripts/job.sh
4. Programmez un cron pour qu’il s’exécute tous les lundis à 19 heures.
0 19 * * * mon /scripts/job.sh
5. Programmez un cron pour qu’il s’exécute toutes les 15 minutes.
*/10 * * * * * /scripts/job.sh
6. Programmez un cron pour qu’il s’exécute les mois sélectionnés
* * * feb,jun,oct * /script/job.sh
7. Exécutez le script shell /home/script/backup.sh
le 4 mars à 7h25
25 7 4 3 * /home/script/backup.sh
8. Programmer un cron pour qu’il s’exécute toutes les 30 secondes
Puisque nous n’avons pas le contrôle sur les secondes dans la Crontab, nous pouvons y parvenir grâce au processus en deux étapes ci-dessous.
- Commençons par programmer une tâche qui s’exécute toutes les minutes.
* * * * * * /home/scripts/script.sh
- Utilisons maintenant la commande
sleep
pour mettre l’exécution en pause pendant 30 secondes.
* * * * * sleep 30 ; /home/scripts/script.sh
La tâche ci-dessus interrompt l’exécution pendant 30 secondes, puis la reprend.
Types de fichiers de configuration Cron
Il existe deux types de fichiers de configuration Cron :
La Crontab du système UNIX/Linux
Ce fichier nécessite les privilèges de l’administrateur car il est généralement utilisé pour les services système et les tâches critiques. Le sixième champ (dans la description syntaxique ci-dessus) est le nom de l’utilisateur sous lequel la commande doit être exécutée. Il permet à la crontab système d’exécuter des commandes sous n’importe quel utilisateur.
La crontab de l’utilisateur
L’utilisateur peut également installer ses propres tâches cron à l’aide de la commande crontab. Ici aussi, le sixième champ (dans la description syntaxique ci-dessus) est la commande à exécuter, et toutes les commandes sont exécutées par l’utilisateur qui a créé la crontab.
Chaque utilisateur peut avoir son propre fichier crontab, et bien que ces fichiers se trouvent dans /var/spool/cron/crontabs
, ils ne sont pas destinés à être édités directement. Nous devons utiliser la commande crontab pour éditer ou configurer nos propres tâches cron.
Comment cela fonctionne-t-il ?
Le service cron (daemon) fonctionne en arrière-plan et vérifie constamment (toutes les minutes) le fichier /etc/crontab
, et les répertoires /etc/cron.*/.
Il vérifie également le répertoire /var/spool/cron/
.
Les commandes sont exécutées par cron lorsque les champs minute, heure et mois correspondent à l’heure actuelle et qu’au moins un des champs deux jours (jour du mois ou jour de la semaine) correspond au jour actuel.
Commandes de base
Liste des travaux Cron existants
Vous pouvez afficher la liste de toutes les tâches Cron sans ouvrir le fichier de configuration crontab à l’aide de la commande suivante
crontab -l
S’il n’y a pas de tâche existante, le résultat sera le suivant
[geekflare@localhost ~]# crontab -l
pas de crontab pour geekflare
[geekflare@localhost ~]#
Si l’utilisateur a déjà ajouté des tâches, le résultat sera le suivant.
[geekflare@localhost ~]# crontab -l
# Editez ce fichier pour introduire les tâches à exécuter par cron.
#
# Chaque tâche à exécuter doit être définie sur une seule ligne
# indiquant avec différents champs quand la tâche sera exécutée
# et la commande à exécuter pour la tâche
#
# Pour définir l'heure, vous pouvez fournir des valeurs concrètes pour
# minute (m), heure (h), jour du mois (dom), mois (mon),
# et le jour de la semaine (dow) ou utiliser '*' dans ces champs (pour 'any').#
# Notez que les tâches seront lancées en fonction de la notion de système de cron
# Notez que les tâches seront lancées en fonction de la notion de temps et de fuseaux horaires du daemon de cron.
#
# La sortie des tâches crontab (y compris les erreurs) est envoyée par
# email à l'utilisateur auquel appartient le fichier crontab (à moins qu'il ne soit redirigé).
#
# Par exemple, vous pouvez exécuter une sauvegarde de tous vos comptes utilisateurs
# à 5 heures du matin chaque semaine avec :
# 0 5 * * 1 tar -zcf /var/backups/home.tgz /home/
#
# Pour plus d'informations, consultez les pages de manuel de crontab(5) et cron(8)
#
# m h dom mon dow command
0 */1 * * * /home/account/scripts/updateAccountStatuses.sh
0 */1 * * * /home/account/scripts/reActivateAccountStatus.sh
[geekflare@localhost ~]#
La table cron est spécifique à l’utilisateur, ce qui signifie que vous devez être connecté avec un utilisateur spécifique pour voir la liste de la table cron.
Lister les cron d’un utilisateur particulier
Pour lister les tâches programmées d’un autre utilisateur, utilisez les options -u(Utilisateur) et -l(Liste).
crontab -u autre_utilisateur -l
Exemple: crontab -u geekflare -l
Ajouter/modifier des entrées de la crontab
Pour modifier l’entrée de la crontab, nous pouvons utiliser l’option -e
comme indiqué ci-dessous.
crontab -e
La commande ci-dessus ouvrira les éditeurs vi dans lesquels vous spécifierez les détails du travail et enregistrerez le fichier. Une fois sauvegardé, vous pouvez vérifier si cron est configuré ou non avec crontab -l
.
Ajouter/modifier les entrées de la crontab pour un utilisateur particulier
Vous pouvez modifier la crontab pour un autre utilisateur à l’aide de la commande suivante
crontab -u autre_utilisateur -e
Exemple: crontab -u geekflare -e
Supprimer une entrée dans la crontab
Utilisez le paramètre <strong>-r</strong>
avec Crontab pour supprimer des tâches planifiées complètes sans confirmation de la crontab
crontab -r
Si vous souhaitez obtenir une confirmation avant de supprimer des tâches programmées, utilisez l’option <strong>-i</strong>
avec -r
, qui demandera une confirmation à l’utilisateur avant de supprimer sa crontab.
crontab -i -r
[geekflare@localhost ~]# crontab -i -r
crontab : effacer vraiment la crontab de geekflare ?
Chaîne spéciale de crontab
En plus de la syntaxe décrite ci-dessus, nous pouvons également utiliser huit chaînes spéciales fournies par Crontab. Cela nous permettra non seulement de gagner du temps mais aussi d’améliorer la lisibilité.
Chaîne spéciale | Description |
@reboot | Exécute une fois, après le démarrage. |
@yearly | Exécute une fois par an, c’est-à-dire 0 0 1 1 * |
@annually | Identique à @yearly |
@monthly | Exécute une fois par mois, c’est-à-dire 0 0 1 * * |
@hebdomadaire | Exécute une fois par semaine, c’est-à-dire 0 0 * * 0 |
@daily | Exécute une fois par jour, c’est-à-dire 0 0 * * * |
@midnight | Identique à @daily |
@hourly | Exécute une fois par heure, c’est-à-dire 0 * * * * |
Exemples de chaînes spéciales Crontab
1. Crontab pour planifier des tâches sur une base annuelle
@yearly /scripts/greeting.sh
Nous pouvons exécuter le script ci-dessus pour envoyer des vœux de bonne année, il s’exécutera à la première minute de chaque année.
2. Crontab pour planifier des tâches à exécuter sur une base mensuelle.
@monthly /scripts/cleanup.sh
Nous pouvons exécuter la Crontab ci-dessus pour effectuer des activités de nettoyage au début de chaque mois.
De même, nous pouvons utiliser d’autres chaînes spéciales Crontab pour des tâches hebdomadaires, quotidiennes et horaires.
Répertoire Cron
L’administrateur système peut utiliser un programme cron pour l’ensemble du système, qui se trouve dans le répertoire cron prédéfini, comme indiqué ci-dessous
- /etc/cron.d
- /etc/cron.daily
- /etc/cron.hourly
- /etc/cron.monthly
- /etc/cron.weekly
Exemples de Crontab en temps réel
Voyons quelques exemples en temps réel, qu’un administrateur système ou un professionnel de l’informatique utilise habituellement.
Supprimer les fichiers et répertoires vides
45 0 * * * * geekflare find /tmp -type f -empty -delete
L’expression cron ci-dessus trouvera les fichiers et répertoires vides dans le répertoire /tmp et les supprimera. Cette tâche sera exécutée quotidiennement à 12h45. Nous devons mentionner le nom d’utilisateur pour exécuter cette tâche. Dans l’exemple ci-dessus, c’est l’utilisateur geekflare qui exécute la tâche cron.
Exécutez plusieurs tâches en utilisant un seul cron
* * * * * * /home/scripts/backup.sh ; /home/scripts/scritp.sh
Plusieurs tâches peuvent être séparées par un point-virgule (;) et peuvent être assignées à une seule expression cron.
Outils de mise en forme et de test de cron
Jusqu’à présent, nous avons discuté des commandes et de la syntaxe de la crontab pour planifier une tâche. Mais qu’en est-il si vous n’êtes pas un administrateur système et que votre travail n’est pas de configurer Cron régulièrement, il n’est peut-être pas possible de se souvenir de la syntaxe et cela ouvre la voie à l’erreur. Ne vous inquiétez pas, nous avons une solution à ce problème.
Il existe plusieurs outils de formatage de Cron disponibles en ligne.
# 1. Cron Job Generator
Cron Job Gener ator est une interface graphique très conviviale dans laquelle vous pouvez spécifier les minutes, les jours et le chemin du script pour générer la crontab.
Prenons un exemple en temps réel où je dois exécuter /home/processMonitor.sh
toutes les 5 minutes du lundi au vendredi.
J’ai donc obtenu la syntaxe Cron ci-dessous que je peux placer dans ma crontab en exécutant
crontab -e
0,5,10,15,20,25,30,35,40,45,50,55 * * * 1-5 /home/processMonitor.sh
# 2. Générateur de Crontab
Crontab Gener ator est un autre outil pratique pour générer une crontab et avec cet outil, vous pouvez également ajouter si vous voulez sauvegarder la sortie cron dans un fichier ou l’envoyer par email.
# 3. Crontab Guru
Crontab G uru est un simple éditeur d’expression de programme cron en ligne. De plus, il fournit un moyen utile de surveiller votre cronjob. Tout ce que nous avons à faire est de copier une commande fournie et de l’ajouter à la fin de la définition de la crontab. Si le travail cron échoue ou ne démarre même pas, vous recevrez un e-mail d’alerte.
Dans l’exemple ci-dessous, le job s’exécutera à 04:05, tous les jours, tous les mois et toutes les semaines.
Conclusion
J’espère que ce qui précède vous aidera à mieux comprendre Crontab et à mettre en place des tâches cron. Planifier des tâches à l’aide de Cron est l’une des nombreuses tâches effectuées par les administrateurs Linux.