[Debian] Les tâches planifiées avec Crontab

Crontab

Crontab est le nom du programme sous Unix (et Linux) qui permet d’éditer des tables de configuration du programme cron. Ces tables spécifient les tâches à exécuter et leur horaire d’exécution avec possibilité d’horaire périodique. Par extension, on appelle souvent « tâche cron » (ou cron job en anglais) toute tâche lancée à horaire périodique.

Les 2 commandes principales pour gérer les crontab sont :

Lister la crontab
crontab -l

Editer la crontab – lance l’éditeur de texte par défaut (vi, vim, nano etc…)
crontab -e

NB : il est nécessaire de disposer d’un script exécutable qui sera la tache lancée par le crontab. Ce script nécessite au minimum les droits d’exécution pour l’utilisateur qui lance la tache

NB2 : il doit aussi avoir comme première ligne, le sha-bang # et le shell utilisé pour s’exécuter (ex : !/bin/sh).

Plus d’infos sur l’exécution d’un script linux.

 

Fonctionnement de Crontab

Chaque entrée de la table (chaque ligne) correspond à une tâche à exécuter et est notée de la façon suivante:
mm hh jj MMM JJJ tâche > log

Dans cette syntaxe:

  • mm représente les minutes (de 0 à 59)
  • hh représente l’heure (de 0 à 23)
  • jj représente le numéro du jour du mois (de 1 à 31)
  • MMM représente le numéro du mois (de 1 à 12) ou l’abréviation du nom du mois (jan, feb, mar, …)
  • JJJ représente l’abréviation du nom du jour ou le chiffre correspondant au jour de la semaine
    (0 représente le dimanche, 1 représente le lundi, …)
  • tâche représente la commande ou le script shell à exécuter
  • log représente le nom d’un fichier dans lequel stocker le journal des opérations.

Si la clause > log n’est pas spécifiée, cron enverra automatiquement un courriel de confirmation.
Pour éviter cela il suffit de spécifier > /dev/null

Pour chaque unité de temps (minute/heure/…) les notations sont possibles:

  • * : a chaque unité de temps
  • 2-5 : les unités de temps (2,3,4,5)
  • */3 : toutes les 3 unités de temps (0,3,6,…)
  • 5,8 : les unités de temps 5 et 8
  • 7-19/1 : toutes les 1 unites de temps de 7 à 19

Enfin il est possible de remplacer toutes les unités de temps par @reboot afin d’effectuer la commande au redémarrage de la machine :
@reboot /root/test.sh

 

Exemples de tâche cron

Une tâche qui se lance tous les jours à 23H30 :
30 23 * * * /root/test.sh
Une tâche qui se lance toutes les heures, passées de 5 minutes :
5 * * * * /root/test.sh
Une tâche qui se lance tous les premiers du mois à 23h30 :
30 23 1 * * /root/test.sh
Une tâche qui se lance tous les quarts d’heure :
15,30,45,0 * * * /root/test.sh
ou de cette manière :
*/15 * * * /root/test.sh
Une tâche qui se lance tous les lundis à 22h28 :
28 22 * * 1 /root/test.sh
Une tâche qui se lance toutes les 2 minutes :
*/2 * * * * /root/test.sh
Une tâche qui se lance toutes les 2 heures:
0 */2 * * * /root/test.sh
Une tâche qui se lance tous les jours pairs du mois à 23h59 :
59 23 */2 * * /root/test.sh

 

Particularités Debian !

Debian introduit quelques modifications a cron qui n’étaient pas disponibles en amont à l’origine. Les modifications les plus significatives introduites sont :

  • gestion des répertoires /etc/cron.{hourly,daily,weekly,monthly} par l’intermédiaire de /etc/crontab
  • gestion de /etc/cron.d (répertoire de dépôt des crontabs de paquet)
  • modifications et corrections pour l’heure d’été et autres problèmes d’heures
  • exécution de crontab avec les privilèges du groupe crontab au lieu de ceux du superutilisateur
  • emplacement des fichiers et commandes spécifiques a Debian
  • configuration spécifique a Debian (/etc/default/cron)
  • nombreuses autres fonctionnalités plus petites et corrections

La prise en charge de /etc/cron.hourly, /etc/cron.daily, /etc/cron.weekly et /etc/cron.monthly est fournie dans Debian a l’aide des réglages par défaut du fichier /etc/crontab. Le fichier système crontab par défaut contient quatre taches, exécutées toutes les heures, tous les jours, toutes les semaines, et tous les mois. Chacune de ses taches exécutera run-parts avec chaque répertoire en argument. Ces taches sont désactivées si anacron est installé (sauf la tache exécutée toutes les heures) pour éviter les conflits entre les deux démons.

run-parts exécute tous les fichiers exécutables situés dans répertoire, et dont le nom satisfait les contraintes décrites ci-dessous.

En effet, conformément à la description précédente, les fichiers de ces répertoires doivent vérifier quelques propriétés, parmi lesquelles :

  • être exécutable
  • appartenir au superutilisateur
  • ne pas être accessible en écriture au groupe ni aux autres
  • s’il s’agit de liens symboliques, pointer vers des fichier appartenant au superutilisateur

De plus, les noms de fichier doivent respecter les exigences de run-parts : ils ne doivent contenir que des caractères alphanumériques : des tirets bas (<< _ >>) et des traits d’union (<< - >>).

NB : Les fichiers ne respectant pas ces exigences ne seront pas exécutés par run-parts. Par exemple, les fichiers dont le nom contient un point seront ignorés !

Le but est d’éviter que cron exécute des fichiers laissés par le gestionnaire de paquet Debian lorsqu’il traite les fichiers de /etc/cron.d/ comme des fichiers de configuration (c’est-a-dire les fichiers qui se terminent par .dpkg-dist, .dpkg-orig et .dpkg-new).

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *