Crontab - Définition

Source: Wikipédia sous licence CC-BY-SA 3.0.
La liste des auteurs est disponible ici.

crontab est le nom du programme Unix qui permet d'éditer la table de configuration du programme cron. Par extension, on appelle souvent cron (ou cron job en anglais) toute application lancée à horaire fixe.

La commande crontab édite en fait un fichier relatif à l'utilisateur qui l'exécute, et en vérifie la syntaxe. Ce fichier se situe dans l'arborescence /var, par exemple :

/var/spool/cron/tabs/utilisateur (SuSE GNU/Linux)
/var/spool/cron/crontabs/utilisateur (Debian GNU/Linux et Ubuntu)
/var/cron/tabs/utilisateur (FreeBSD et OpenBSD)

Ainsi pour l'utilisateur root sur une machine Debian, la table cron sera stockée dans:

/var/spool/cron/crontabs/root

Le système Debian dispose en outre d'une crontab centralisée dans /etc/crontab.

Syntaxe

Afin d'éditer la table cron, il suffit d'exécuter la commande suivante:

crontab -e

Cette commande a pour effet de lancer l'éditeur par défaut (en général vi) présentant la table actuelle (donc aucune s'il s'agit du premier lancement 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, apr, ...)
  • 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

Si sur la même ligne on trouve précisées une unité de temps "numéro du jour du mois" et une unité de temps "jour de la semaine", celles-ci sont considérées par crontab comme cumulatives.

Exemples

Imaginons que l'on veuille faire un journal (dans le fichier /tmp/log_df.txt par exemple) automatisé de l'espace disque libre (commande df) à des intervalles de temps précis:

  • Tous les jours à 23h30:
30 23 * * * df >>/tmp/log_df.txt
  • Toutes les heures, passées de 5 minutes :
5 * * * * df >>/tmp/log_df.txt
  • Tous les premiers du mois à 23h30:
30 23 1 * * df >>/tmp/log_df.txt
  • Tous les lundis à 22h28:
28 22 * * 1 df >>/tmp/log_df.txt
  • Du 2 au 5 de chaque mois à 10h12
12 10 2-5 * * df >>/tmp/log_df.txt
  • Tous les jours pairs du mois à 23h59
59 23 */2 * * df >>/tmp/log_df.txt
  • Toutes les 5 minutes
*/5 * * * * df >>/tmp/log_df.txt

Il est également possible d'exécuter automatiquement des commandes plus complexes à l'aide d'un script shell. Il suffit donc dans un premier temps de créer un script. Puis de le déclarer en tant que tâche dans la table cron.

Le script shell suivant (que l'on supposera stocké dans /home/backup sous le nom backup.cmd) exporte les enregistrements de MySQL (de la table ccmusers par exemple) dans un fichier dont le nom est ccmusers suivi de la date sous la forme jour-mois-annee-heure-minute:

#!/bin/sh
DATE=$(date +%d-%m-%Y-%H-%M)
/usr/local/mysql/bin/mysqldump -u root ccmusers > /home/backup/ccmusers${DATE}.sql

Ainsi pour automatiser (chaque jour à 23h59) le backup de la table ccmusers de MySQL et l'appel d'une page web, il suffira d'ajouter l'entrée suivante dans la table cron:

59 23 * * * /home/backup/backup.cmd >>/dev/null
30 21 * * * wget -O /dev/null http://exemple.com/mapage.html >>/dev/null

Changements d'heure : Les tâches Cron entre 02h00 et 02h59 du dernier samedi du mois de Mars ne seront pas executés (On passe de 2h à 3h) si vous utilisez le changement d'heure d'hiver/été. A l'inverse, les tâches Cron entre 02h00 et 02h59 du dernier samedi du mois d'Octobre seront executés 2 fois (On passe de 3h à 2h).

Page générée en 0.036 seconde(s) - site hébergé chez Contabo
Ce site fait l'objet d'une déclaration à la CNIL sous le numéro de dossier 1037632
A propos - Informations légales | Partenaire: HD-Numérique
Version anglaise | Version allemande | Version espagnole | Version portugaise