116 lines
2.9 KiB
Markdown
116 lines
2.9 KiB
Markdown
# crontab
|
||
|
||

|
||
|
||
**cron** est un démon Unix qui exécute, chaque minute, les tâches planifiées par les utilisateurs. La commande **crontab** (contraction de *chrono table*, « table de planification ») permet de consulter et modifier ces tâches.
|
||
|
||
Chaque utilisateur dispose de sa propre table ; le démon `cron`, lancé par **root**, exécute chaque tâche sous l'identité de son propriétaire.
|
||
|
||
## Format d'une ligne
|
||
|
||
Chaque ligne d'une crontab suit le format suivant :
|
||
|
||
```
|
||
mm hh jj MMM JJJ commande
|
||
```
|
||
|
||
| Champ | Plage | Description |
|
||
| ----- | ----- | ----------- |
|
||
| `mm` | 0–59 | Minute |
|
||
| `hh` | 0–23 | Heure |
|
||
| `jj` | 1–31 | Jour du mois |
|
||
| `MMM` | 1–12 | Mois |
|
||
| `JJJ` | 0–6 | Jour de la semaine (0 = dimanche) |
|
||
|
||
## Lister les tâches
|
||
|
||
Afficher la table de l'utilisateur connecté :
|
||
|
||
```
|
||
crontab -l
|
||
```
|
||
|
||
## Mots-clés
|
||
|
||
Plusieurs mots-clés peuvent remplacer le code horaire :
|
||
|
||
| Mot-clé | Description | Équivalent |
|
||
| ------- | ----------- | ---------- |
|
||
| `@reboot` | Au démarrage | (aucun) |
|
||
| `@yearly` | Tous les ans | `0 0 1 1 *` |
|
||
| `@annually` | Tous les ans | `0 0 1 1 *` |
|
||
| `@monthly` | Tous les mois | `0 0 1 * *` |
|
||
| `@weekly` | Toutes les semaines | `0 0 * * 0` |
|
||
| `@daily` | Tous les jours | `0 0 * * *` |
|
||
| `@midnight` | Toutes les nuits | `0 0 * * *` |
|
||
| `@hourly` | Toutes les heures | `0 * * * *` |
|
||
|
||
## Éditer la table
|
||
|
||
Ouvrir la crontab de l'utilisateur connecté dans l'éditeur par défaut :
|
||
|
||
```
|
||
crontab -e
|
||
```
|
||
|
||
L'éditeur utilisé peut être modifié via la variable d'environnement `EDITOR` :
|
||
|
||
```
|
||
$ export EDITOR=nano
|
||
```
|
||
|
||
## Supprimer la table
|
||
|
||
```
|
||
crontab -r
|
||
```
|
||
|
||
## Remplacer la table
|
||
|
||
Remplacer la table courante par le contenu d'un fichier :
|
||
|
||
```
|
||
crontab <fichier>
|
||
```
|
||
|
||
## Rediriger les sorties
|
||
|
||
Par défaut, la sortie standard d'une tâche `cron` est envoyée par mail à son propriétaire. Pour la rediriger, on utilise la syntaxe shell habituelle :
|
||
|
||
```
|
||
mm hh jj MMM JJJ tâche > fichier1 2> fichier2
|
||
```
|
||
|
||
- `fichier1` reçoit la sortie standard
|
||
- `fichier2` reçoit l'erreur standard
|
||
|
||
Pour ignorer toute sortie :
|
||
|
||
```
|
||
>/dev/null 2>&1
|
||
```
|
||
|
||
## Inspecter l'activité
|
||
|
||
Afficher la date du dernier accès au script de `cron` (indicateur approximatif d'activité) :
|
||
|
||
```
|
||
ls -lut /etc/init.d/cron
|
||
```
|
||
|
||
Extraire les lignes relatives à `cron` dans le journal système :
|
||
|
||
```
|
||
grep -w cron /var/log/syslog
|
||
```
|
||
|
||
## Pour aller plus loin
|
||
|
||
Les tables sont stockées dans un fichier propre à chaque utilisateur :
|
||
|
||
- `/var/spool/cron/crontabs/<utilisateur>` sous Debian, MX Linux
|
||
- `/var/spool/cron/<utilisateur>` sous Red Hat, Fedora et CentOS
|
||
|
||
Une table système centralisée existe également dans `/etc/crontab`.
|
||
|
||
Pour les postes qui ne restent pas allumés en permanence, l'utilitaire **anacron** prend le relais : il exécute, au démarrage, les tâches qui auraient dû tourner pendant que la machine était éteinte. |