Crontab

From Base de connaissances eggdrops & TCL
Revision as of 12:47, 20 May 2021 by CrazyCat (talk | contribs) (Voir aussi)

(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to: navigation, search

Crontab est le nom du programme sous Unix (ou Linux) qui permet d'éditer des tables de configuration du programme cron

arborescence /var, par exemple :

/var/spool/cron/crontabs/utilisateur (AIX, HP-UX, Debian GNU/Linux et Ubuntu)
/var/spool/cron/tabs/utilisateur (SuSE GNU/Linux)
/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

Certains systèmes Linux (SuSE, Debian, Red Hat) disposent en plus d'une crontab centralisée dans /etc/crontab. Sur SuSE, on trouve également /etc/cron.d, /etc/cron.hourly, /etc/cron.daily, /etc/cron.weekly et /etc/cron.monthly.

Syntaxe

Visualisation

Afin d'afficher le contenu de la table cron (pour l'utilisateur courant), il suffit d'exécuter la commande suivante :

crontab -l

Cette commande ne permet pas d'afficher la crontab centralisée (/etc/crontab).

Modification

Afin d'éditer la table cron (pour l'utilisateur courant), 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). Cette commande ne permet pas de modifier la crontab centralisée (/etc/crontab).


mm hh jj MMM JJJ tâche > log

Dans cette syntaxe:

  • 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, ...)
  • 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

  • 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 1er du mois à 23h30
30 23 1 * * df >>/tmp/log_df.txt
  • Tous les lundi à 28h22
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 paires à 23h59
59 23 */2 * * df >>/tmp/log_df.txt
  • Toutes les 5 minutes
*/5 * * * * df >>/tmp/log_df.txt


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


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

Voir aussi

Cron