Comment c’est calculé
Une ligne crontab commence par cinq champs séparés par des espaces, suivis de la commande à exécuter. Cron les vérifie chaque minute et lance la commande quand la minute, l’heure, le jour du mois, le mois et le jour de la semaine correspondent tous.
┌─ Minute │ ┌─ Heure │ │ ┌─ Jour du mois │ │ │ ┌─ Mois │ │ │ │ ┌─ Jour de la semaine * * * * * /path/to/command
Les deux champs de jour se combinent d’une façon qui surprend beaucoup de gens : quand les deux sont restreints, la tâche s’exécute dès que l’un des deux correspond. 0 0 13 * 5 s’exécute chaque 13 du mois et chaque vendredi, pas seulement le vendredi 13. Quand l’un des deux commence par *, les deux doivent correspondre.
Les cinq champs
| Champ | Valeurs autorisées |
|---|---|
| Minute | 0–59 |
| Heure | 0–23 |
| Jour du mois | 1–31 |
| Mois | 1–12 ou JAN–DEC |
| Jour de la semaine | 0–7 ou SUN–SAT (0 et 7 sont le dimanche) |
Caractères spéciaux
- * correspond à toutes les valeurs du champ.
- , énumère des valeurs : 1,15 est le 1er et le 15.
- - est une plage : 1-5 est du lundi au vendredi dans le champ du jour de la semaine.
- / est un pas : */10 est une valeur sur dix, 5/10 est une valeur sur dix à partir de 5, 9-17/2 une heure sur deux de 9 à 17.
- @hourly, @daily, @weekly, @monthly et @yearly remplacent les cinq champs ; @reboot s’exécute une fois au démarrage du serveur.
Exemple
30 2 * * 1-5 s’exécute à 02:30 du lundi au vendredi : minute 30, heure 2, n’importe quel jour du mois, n’importe quel mois, et jours de la semaine 1 à 5. Écrite 30 2 * * 1-5 /usr/local/bin/backup.sh dans la crontab, elle lance une sauvegarde chaque nuit ouvrée.
Questions
Que signifie */5 dans cron ?
Une valeur sur cinq du champ. Dans le champ des minutes, */5 exécute la tâche aux minutes 0, 5, 10 et ainsi de suite jusqu’à 55 : toutes les cinq minutes. */15 est tous les quarts d’heure, et */2 dans le champ des heures est une heure sur deux à partir de minuit.
Comment ajouter une tâche cron sur un serveur Linux ?
Exécutez crontab -e avec l’utilisateur sous lequel la tâche doit tourner, ajoutez une ligne avec les cinq champs et la commande, puis enregistrez et fermez l’éditeur. crontab -l affiche les tâches, et les tâches système vont dans un fichier de /etc/cron.d, avec le nom d’utilisateur après les cinq champs.
Quel fuseau horaire cron utilise-t-il ?
Celui du serveur, généralement UTC sur un VPS. 0 3 * * * sur un serveur en UTC s’exécute à 04:00 à Paris en hiver et à 05:00 en été. Certaines versions de cron, comme cronie, acceptent une ligne CRON_TZ= au-dessus des tâches ; sinon convertissez l’heure vous-même.
Faut-il utiliser cron ou un timer systemd ?
Cron est plus simple et fonctionne partout. Un timer systemd demande deux petits fichiers, mais journalise chaque exécution dans le journal, peut rattraper les exécutions manquées pendant que le serveur était éteint (Persistent=true) et empêche deux copies de la même tâche de tourner en même temps.