CRON

Cron est un outil simple et par conséquent fantastique pour planifier des tâches sous Linux. Rien de moins.

Tout administrateur système connait l’importance de pouvoir gérer des tâches régulières, automatiquement, en arrière plan.
L’utilitaire Linux Cron est un moyen efficace pour planifier des tâches à des moments spécifiques.

Pour commencer, voici la syntaxe de Cron :

m h dom mon dow user cmd
Champ Description Valeur acceptée
m minutes 0-59
h heure 0-23
dom jour du mois 1-31
mon mois 1-12
dow jour de la semaine 0-6
user utilisateur n’importe quel utilisateur valide
command commande n’importe quelle commande valide

Cron se présente sous forme d’un fichier de configuration accessible avec
sudo nano /etc/crontab
Il suffit de sauvegarder une modification dans le fichier pour l’activer automatiquement. Pas de service à relancer, pas de reboot à effectuer.

  • 1 – Planifier une tâche à un moment spécifique

L’utilisation basique de cron est d’exécuter une tâche à un moment spécifique comme dans cet exemple.
L’utilisateur root exécutera le script « full-backup » le 10 juin à 08:30 du matin

30 08 10 06 * root /root/scripts/full-backup

30 – 30ème minute
08 – 8 heures du matin (cron fonctionne en 24 heures)
10 – 10ème jour
06 – 6ème mois (juin)
* – n’importe quel jour de la semaine

  • 2 – Planifier une tâche plus d’une fois (2 fois par jour par exemple)

L’utilisateur backupuser exécutera le script incremental-backup 2 fois par jour, à heures fixes.
Comme pour l’exemple précédent, mais des valeurs séparées par des virgules signalent plusieurs exécutions

00 11,16 * * * backupuser /home/backupuser/scripts/incremental-backup

00 – 0ème minute (début de l’heure)
11,16 – 11 et 16 heures
* – chaque jour
* – chaque mois
* – n’importe quel jour de la semaine

  • 3 – Planifier une tâche dans une plage de temps spécifique

Vous pouvez planifier une tâche chaque heure pendant une tranche horaire spécifique grâce au signe ‘-‘

Chaque jour, pendant les heures de bureau
Cet exemple vérifie le statut d’une base de données chaque jour, même les weekends, pendant les heures de bureau (de 9 à 18h)

00 09-18 * * * sqluser /home/sqluser/bin/check-db-status

00 – 0ème minute (début de l’heure)
09-18 – 9, 10, 11, 12, 13, 14, 15, 16, 17, 18 heures
* – chaque jour
* – chaque mois
* – n’importe quel jour de la semaine

Chaque jour de travail, pendant les heures de bureau
Cet exemple vérifie le statut d’une base de données chaque jour sauf les weekends, pendant les heures de bureau (de 9 à 18h)

00 09-18 * * 1-5 sqluser /home/sqluser/bin/check-db-status

00 – 0ème minute (début de l’heure)
09-18 – 9, 10, 11, 12, 13, 14, 15, 16, 17, 18 heures
* – chaque jour
* – chaque mois
1-5 – lundi, mardi, mercredi, jeudi, vendredi

  • 4 – Planifier une tâche chaque minute

Normalement, vous ne devriez pas avoir de tâche planifiée toutes les minutes. Cependant, comprendre cet exemple vous permettra de mieux appréhender les exemples suivants.

* * * * user command

le signe * signifie ‘tout ce qui est possible’. Donc ici, chaque minute, de chaque heure, de chaque jour de l’année.

D’autre signes sont possibles, particulièrement utiles :

/5 dans le champ minute signifie ‘toutes les 5 minutes’
0-10/2 dans le champ minute signifie ‘toutes les 2 minutes pendant les 10 premières minutes de l’heure’.

Cette sytaxe peut bien sûr être employées dans les 4 autres champs h dom mon dow

  • 5- Planifier une tâche toutes les 10 minutes

Vous pourriez faire la chose suivante si vous vouliez vérifier un espace disque toutes les 10 minutes.

*/10 * * * * user /home/user/check-disk-space

Vous pourriez cependant avoir besoin d’exécuter cette tâche seulement pendant les heures de bureau, par exemple. Les exemples au dessus vous montrent la marche à suivre. Ce serait :

*/10 09-18 * * 1-5 user /home/user/check-disk-space

*/10 – toutes les 10 minutes, toutes les heures
09-18 – 9, 10, 11, 12, 13, 14, 15, 16, 17, 18 heures
* – chaque jour
* – chaque mois
1-5 – lundi, mardi, mercredi, jeudi, vendredi

Il existe certains cas spéciaux où vous pouvez utiliser des mots-clés précédés du signe ‘@’ en remplacement des 5 champs :

Mot clé Equivalent
@yearly 0 0 1 1 *
@daily 0 0 * * *
@hourly 0 * * * *
@reboot Exécuter au démarrage
  • 6 – Planifier une tâche à la première minute de l’année en utilisant @yearly

Si vous vouliez qu’une tâche s’exécute à la première minute de l’année, vous pourriez utiliser le mot-clé @yearly

@yearly user /home/user/annual-maintenance
  • 7 – Planifier une tâche toutes les secondes

C’est impossible : l’unité de temps minimale reconnue par cron est une minute.

  • 8 – Spécifier une variable PATH dans crontab

Jusqu’ici nous avons utilisé les chemins absolus des scripts.
Nous pourrions mettre ces chemins dans une variable PATH pour simplifier l’écriture des tâches :

PATH=/bin:/sbin:/usr/bin:/usr/sbin:/home/user

@yearly annual-maintenance
*/10 * * * * check-disk-space

Sources

Laisser un commentaire