2022-08-29 04:09 Temps de lecture : 17 min

Crontab sous Linux - avec des exemples et des outils en temps réel

Examinons en détail crontab, ses instructions et diverses actions associées.

Nous allons explorer la méthode de programmation des tâches à l'aide de l'outil cron, et enfin, nous analyserons aussi certains outils en ligne qui facilitent la mise en forme et la vérification des commandes cron.

Genèse

Crontab, abréviation de "table cron", tire son nom du terme grec Chronos, signifiant temps. Il s'agit d'un processus système fonctionnant en arrière-plan, exécutant automatiquement des opérations et des tâches selon une planification horaire.

Applications Pratiques

Crontab se révèle utile pour diverses actions telles que l'automatisation des sauvegardes, la gestion des rotations de fichiers journaux, la synchronisation des fichiers entre serveurs distants, le nettoyage des dossiers temporaires, entre autres. Bien qu'il puisse être utilisé pour une multitude de tâches, il devient particulièrement précieux dans le cadre de l'administration système.

Grâce à cron, un administrateur a la possibilité de programmer l'exécution d'une tâche à une date et heure précises.

Découvrons ensemble comment mettre cela en œuvre.

Structure de Commande Crontab

L'outil cron analyse les fichiers de configuration pour exécuter une série de commandes. Pour interpréter les lignes des fichiers de configuration crontab, il suit une syntaxe spécifique. Cette syntaxe est constituée de six champs, les cinq premiers (1-5) définissant la date et l'heure d'exécution. Le dernier champ (le sixième) peut contenir un nom d'utilisateur et/ou une tâche/commande/script à exécuter.

* * * * * COMMANDE/SCRIPT-A-EXECUTER NOM_UTILISATEUR

│ │ │ │ │
│ │ │ │ │
│ │ │ │ |_________ Jour de la semaine (0 – 6, 0 pour Dimanche, ou noms)
│ │ │ |____________ Mois (1 – 12), * pour tous les mois
│ │ |______________ Jour du mois (1 – 31), * pour tous les jours
│ |________________ Heure (0 – 23), * pour toutes les heures
|___________________ Minute (0 – 59), * pour toutes les minutes

Points à retenir:

  • L'astérisque
  • sert à indiquer toutes les valeurs possibles pour un champ donné. Par exemple, un astérisque dans le champ "heure" signifie toutes les heures, et dans le champ "mois", il signifie tous les mois.

Le nom d'utilisateur est optionnel (uniquement disponible dans le fichier système crontab)

Exemples:

Illustrons la syntaxe par quelques exemples:

0 5 * * * /scripts/job.sh

1. Planifie l'exécution d'un cron à 5 heures du matin, tous les jours.

0 6,18 * * * /scripts/job.sh

2. Programme l'exécution d'un cron deux fois par jour, à 6h et à 18h.

* * * * * /scripts/job.sh

3. Planifie l'exécution d'un cron à chaque minute.

0 19 * * mon /scripts/job.sh

4. Programme un cron pour qu'il s'exécute tous les lundis à 19h.

*/10 * * * * /scripts/job.sh

5. Programme l'exécution d'un cron toutes les 10 minutes.

* * * feb,jun,oct * /script/job.sh

6. Programme un cron pour qu'il s'exécute uniquement durant les mois de février, juin et octobre.

25 7 4 3 * /home/script/backup.sh

7. Exécute le script shell /home/script/backup.sh le 4 mars à 7h25.

8. Planifie un cron pour qu'il s'exécute toutes les 30 secondes.

  • Comme crontab ne permet pas de contrôler directement les secondes, nous devons procéder en deux étapes, comme décrit ci-dessous.
* * * * * /home/scripts/script.sh
  • Nous planifions d'abord une tâche qui s'exécute toutes les minutes.
* * * * * sleep 30; /home/scripts/script.sh

Ensuite, nous utilisons la commande sleep pour suspendre l'exécution pendant 30 secondes.

La tâche restera inactive pendant 30 secondes avant de reprendre son exécution.

Types de Fichiers de Configuration Cron

Il existe deux catégories de fichiers de configuration Cron :

Crontab du système UNIX/Linux

Elle requiert les privilèges root car elle est principalement utilisée pour les services système et les opérations critiques. Le sixième champ (dans la description de la syntaxe ci-dessus) spécifie l'utilisateur sous lequel la commande doit être exécutée. Cela permet à la crontab système d'exécuter des commandes sous n'importe quel utilisateur.

Crontab Utilisateur

Chaque utilisateur peut aussi configurer ses propres tâches cron via la commande crontab. Dans ce cas, le sixième champ (dans la description de la syntaxe ci-dessus) est la commande à exécuter, et toutes les commandes sont exécutées avec les droits de l'utilisateur ayant créé la crontab. Chaque utilisateur possède son propre fichier crontab, qui, bien que stocké dans /var/spool/cron/crontabs, ne doit pas être modifié directement. La commande crontab est à utiliser pour modifier ou configurer ses tâches cron personnelles.

Fonctionnement? Le service cron (démon) fonctionne en arrière-plan et vérifie en permanence (chaque minute) le fichier /etc/crontab ainsi que les répertoires /etc/cron.*/. Il examine é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 de jour (jour du mois ou jour de la semaine) correspond au jour actuel.

Instructions de Base

Affichage des tâches Cron existantes

crontab -l

Cette commande permet d'afficher toutes les tâches Cron, sans nécessiter l'ouverture du fichier de configuration.

[[email protected] ~]# crontab -l
no crontab for toptips.fr
[[email protected] ~]#

Si aucune tâche n'existe, la sortie affichera:

[[email protected] ~]# crontab -l
# Edit this file to introduce tasks to be run by cron.
#
# Each task to run has to be defined through a single line
# indicating with different fields when the task will be run
# and what command to run for the task
#
# To define the time you can provide concrete values for
# minute (m), hour (h), day of month (dom), month (mon),
# and day of week (dow) or use '*' in these fields (for 'any').#
# Notice that tasks will be started based on the cron's system
# daemon's notion of time and timezones.
#
# Output of the crontab jobs (including errors) is sent through
# email to the user the crontab file belongs to (unless redirected).
#
# For example, you can run a backup of all your user accounts
# at 5 a.m every week with:
# 0 5 * * 1 tar -zcf /var/backups/home.tgz /home/
#
# For more information see the manual pages of crontab(5) and cron(8)
#
# m h  dom mon dow   command
0 */1 * * * /home/account/scripts/updateAccountStatuses.sh
0 */1 * * * /home/account/scripts/reActivateAccountStatus.sh
[[email protected] ~]#

Si des tâches ont été configurées, elles seront affichées de la sorte.

La table cron est spécifique à chaque utilisateur; il faut être connecté avec un utilisateur particulier pour consulter sa table cron.

Affichage des Crons pour un Utilisateur Spécifique

Pour afficher les tâches programmées d'un autre utilisateur, utilisez l'option -u (utilisateur) et -l (liste).

crontab -u nom_autre_utilisateur -l

Par exemple: crontab -u toptips.fr -l

Ajout/Modification des Entrées Crontab

Pour modifier une entrée crontab, utilisez l'option -e comme suit:

crontab -e

La commande ci-dessus ouvre l'éditeur vi dans lequel vous pouvez spécifier les détails de la tâche et enregistrer le fichier. Une fois enregistré, la commande crontab -l permet de vérifier si cron est configuré correctement.

Ajout/Modification des Entrées Crontab pour un Utilisateur Spécifique

crontab -u nom_autre_utilisateur -e

Pour modifier la crontab d'un autre utilisateur, utilisez cette commande:

Par exemple: crontab -u toptips.fr -e

Suppression d'une Entrée Crontab

Pour supprimer des tâches planifiées entières sans confirmation, utilisez l'option -r avec Crontab.

crontab -r

crontab -i -r
[[email protected] ~]# crontab -i -r
crontab: really delete toptips.fr's crontab?

Si une confirmation est souhaitée avant de supprimer les tâches programmées, ajoutez l'option -i à -r, ce qui demandera une confirmation à l'utilisateur avant la suppression de sa crontab.

Chaînes Spéciales Crontab

En plus de la syntaxe que nous avons détaillée, huit chaînes spéciales sont également disponibles. Elles permettent un gain de temps et une meilleure lisibilité.
Chaîne spéciale
Description
@reboot
Exécution unique, après le démarrage.
@yearly
Exécution annuelle, équivalant à 0 0 1 1 *
@annually
Identique à @yearly
@monthly
Exécution mensuelle, équivalant à 0 0 1 * *
@weekly
Exécution hebdomadaire, équivalant à 0 0 * * 0
@daily
Exécution quotidienne, équivalant à 0 0 * * *
@midnight
Identique à @daily
@hourly

Exécution horaire, équivalant à 0 * * * *

Exemples de Chaînes Spéciales Crontab

1. Crontab pour une tâche planifiée annuellement

@yearly /scripts/salutation.sh

Cette configuration permet d'envoyer un message de vœux de nouvel an à la première minute de chaque année.

2. Crontab pour une tâche planifiée mensuellement

@monthly /scripts/cleanup.sh

Cette configuration est utilisée pour effectuer des tâches de nettoyage au début de chaque mois.

Des chaînes spéciales Crontab peuvent être également utilisées pour des tâches hebdomadaires, quotidiennes et horaires.

Répertoires Cron

  • L'administrateur système peut utiliser une planification cron à l'échelle du système, située dans les répertoires cron prédéfinis suivants:
  • /etc/cron.d
  • /etc/cron.daily
  • /etc/cron.hourly
  • /etc/cron.monthly

/etc/cron.weekly

Exemples Pratiques Crontab

Voici quelques exemples d'utilisation courante par les administrateurs système et professionnels de l'informatique.

Supprimer les Fichiers et Répertoires Vides

45 0 * * * toptips.fr find /tmp -type f -empty -delete

Cette instruction cron recherche les fichiers et répertoires vides dans le dossier /tmp et les supprime. L'opération a lieu à 00h45 chaque jour. L'utilisateur exécutant la tâche doit être mentionné. Dans cet exemple, c'est l'utilisateur toptips.fr.

Exécution de Plusieurs Tâches avec un Seul Cron

* * * * * /home/scripts/backup.sh; /home/scripts/scriptp.sh

Plusieurs tâches ou travaux peuvent être combinés au sein d'une seule expression cron, séparés par un point-virgule (;).

Outils de Mise en Forme et de Vérification de Cron

Nous avons exploré jusqu'ici les commandes et la syntaxe de crontab. Cependant, si la configuration de Cron n'est pas une activité régulière, il peut être difficile de se souvenir de toute la syntaxe et d'éviter les erreurs. Heureusement, il existe des solutions.

Plusieurs outils en ligne sont disponibles pour faciliter la mise en forme des expressions Cron.

# 1. Générateur de tâches Cron Générateur de tâches Cron

offre une interface graphique conviviale qui permet de générer une crontab en spécifiant les minutes, les jours, et le chemin du script.

Par exemple, pour exécuter le script /home/processMonitor.sh toutes les 5 minutes du lundi au vendredi, la syntaxe Cron à insérer via
crontab -e est:

0,5,10,15,20,25,30,35,40,45,50,55 * * * 1-5 /home/processMonitor.sh

# 2. Easycron Easycron

est un planificateur de tâches cron en ligne. Il permet de créer des tâches cron en spécifiant une URL à appeler et l'heure d'exécution. Une expression cron ou un formulaire descriptif permet de définir la planification. Une authentification HTTP basique optionnelle assure une sécurité supplémentaire.

Easycron offre aussi d'autres fonctionnalités : expressions Cron standard, journaux d'exécution des tâches Cron, notifications par e-mail, journaux d'erreurs, etc.

# 3. Générateur de Crontab Générateur de Crontab

Cet outil permet de générer des crontabs. Il offre également la possibilité de sauvegarder la sortie cron dans un fichier ou de l'envoyer par e-mail.

# 4. Crontab Guru Crontab Guru

est un éditeur d'expressions de planification cron en ligne, simple d'utilisation. Il propose également une méthode efficace de surveillance des tâches cron : en ajoutant une commande fournie à la fin de la définition crontab, une alerte par e-mail sera envoyée en cas d'échec ou de non-exécution de la tâche.

Dans l'exemple ci-dessous, la tâche s'exécute à 04h05, tous les jours, tous les mois et toutes les semaines.

# 5. Testeur CRON Testeur CRON

permet de vérifier la validité des définitions d'heure/date cron. Il peut être utile de décoder une syntaxe cron existante pour la maintenance ou pour un simple test.

Cet outil permet de le faire en copiant-collant l'expression cron dans le champ prévu, en choisissant le nombre d'itérations, et en cliquant sur "Test" pour visualiser les dates d'exécution.

Par exemple, pour l'expression cron 4 3 */2 * *, qui devrait s'exécuter à 03h04 tous les deux jours, le testeur cron confirme le comportement attendu.

Conclusion J'espère que cet aperçu vous a permis de mieux comprendre Crontab et de simplifier la configuration des tâches cron. La planification des tâches via Cron est une compétence essentielle pour un administrateur Linux. Si vous êtes intéressé par l'acquisition de compétences avancées, consultez ce cours

.

Auteur
France

Rédacteur tech, guides pratiques et astuces numériques.