crontab.run

Explication de la commande crontab

Le démon cron (crond) est un service d'arrière-plan sur les systèmes d'exploitation Unix qui exécute des commandes planifiées. Il lit la configuration dans les fichiers crontab (tables cron), qui définissent quand et à quelle fréquence chaque commande doit s'exécuter.

Syntaxe

La commande crontab gère les fichiers crontab par utilisateur :

crontab [-u user] [-l | -r | -e | -i] [file]

Options

-e
Édite le crontab de l'utilisateur actuel dans l'éditeur par défaut ($VISUAL ou $EDITOR). Le nouveau crontab est installé à la fermeture de l'éditeur.
-l
Affiche le crontab de l'utilisateur actuel sur la sortie standard.
-r
Supprime entièrement le crontab de l'utilisateur actuel.
-i
Demande une confirmation avant la suppression (utilisé avec -r).
-u user
Opère sur le crontab de l'utilisateur spécifié au lieu du vôtre. Nécessite les privilèges root.
file
Installe le crontab à partir du fichier donné. Utilisez - pour l'entrée standard.

Format du fichier crontab

Chaque ligne d'un fichier crontab est soit une affectation de variable d'environnement, un commentaire (commençant par #), soit une tâche cron avec ce format :

┌───────────── minute (0–59)
│ ┌───────────── heure (0–23)
│ │ ┌───────────── jour du mois (1–31)
│ │ │ ┌───────────── mois (1–12 ou JAN–DEC)
│ │ │ │ ┌───────────── jour de la semaine (0–6 ou SUN–SAT)
│ │ │ │ │
* * * * *  commande à exécuter

Opérateurs de champ

* (asterisk)
Correspond à toutes les valeurs possibles du champ.
, (comma)
Spécifie une liste de valeurs. Exemple : 1,15 dans le champ jour du mois signifie le 1er et le 15.
- (hyphen)
Définit une plage inclusive. Exemple : 9-17 dans le champ heure signifie chaque heure de 9 à 17.
/ (slash)
Définit un pas. Exemple : */10 dans le champ minute signifie toutes les 10 minutes. Peut être combiné avec une plage : 1-30/5.

Chaînes spéciales

Au lieu des cinq champs de temps, vous pouvez utiliser l'une de ces chaînes abrégées :

StringEquivalent
@yearly / @annually0 0 1 1 *
@monthly0 0 1 * *
@weekly0 0 * * 0
@daily / @midnight0 0 * * *
@hourly0 * * * *
@rebootRun once at startup

Variables d'environnement

Vous pouvez définir des variables d'environnement en haut d'un fichier crontab. Les plus courantes :

SHELL
Le shell utilisé pour exécuter les commandes (par défaut : /bin/sh).
PATH
Le chemin de recherche des commandes. Le PATH par défaut de cron est minimal (généralement /usr/bin:/bin), utilisez donc toujours des chemins absolus ou définissez PATH explicitement.
MAILTO
Où envoyer la sortie des commandes. Définissez à "" pour supprimer les e-mails. Par défaut, la sortie est envoyée par e-mail au propriétaire du crontab.
CRON_TZ
Définit le fuseau horaire du crontab (non pris en charge sur tous les systèmes). Sans cela, cron utilise le fuseau horaire du système.
SHELL=/bin/bash
PATH=/usr/local/bin:/usr/bin:/bin
[email protected]

*/5 * * * * /home/user/scripts/backup.sh

Crontab système vs. crontab utilisateur

Les crontabs utilisateur (édités avec crontab -e) ont cinq champs de temps plus la commande. Le crontab système (/etc/crontab) et les fichiers dans /etc/cron.d/ ont un champ supplémentaire entre les champs de temps et la commande : le nom d'utilisateur sous lequel la commande s'exécute.

Exemple de crontab système :

# /etc/crontab
SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

# m  h  dom mon dow user    command
*/15 *  *   *   *   root    /usr/local/bin/system-check.sh
0    2  *   *   *   backup  /usr/local/bin/nightly-backup.sh

Erreurs courantes

% (percent sign)

Le signe pourcentage (%) a une signification spéciale dans crontab : il est converti en saut de ligne, et tout ce qui suit le premier % est envoyé comme entrée standard à la commande. Pour utiliser un % littéral, échappez-le avec \%.

# Wrong — the % will be interpreted
0 0 * * * echo "Date: $(date +%Y-%m-%d)"

# Correct — escape the %
0 0 * * * echo "Date: $(date +\%Y-\%m-\%d)"

PATH

Cron s'exécute avec un PATH minimal. Les scripts qui dépendent de commandes dans /usr/local/bin ou d'autres répertoires doivent utiliser des chemins absolus ou définir PATH en haut du crontab.

Day-of-month + day-of-week

Lorsque le jour du mois et le jour de la semaine sont tous deux restreints (pas *), cron exécute la commande quand l'un ou l'autre correspond (logique OU), pas quand les deux correspondent. Par exemple, 0 0 1 * 5 s'exécute à minuit le 1er de chaque mois ET chaque vendredi.

Timezone

Cron utilise le fuseau horaire du système par défaut. Si votre serveur est en UTC mais que vous voulez des tâches dans un fuseau horaire local, utilisez CRON_TZ (si pris en charge) ou convertissez les heures manuellement.

Output and logging

Par défaut, cron envoie toute sortie (stdout et stderr) au propriétaire du crontab. Pour rendre une tâche silencieuse, redirigez la sortie : command > /dev/null 2>&1. Pour journaliser la sortie, redirigez vers un fichier : command >> /var/log/myjob.log 2>&1.

# Discard all output
*/5 * * * * /path/to/script.sh > /dev/null 2>&1

# Log output to a file
*/5 * * * * /path/to/script.sh >> /var/log/myscript.log 2>&1

Exemples pratiques