cron et timers systemd — aide-mémoire de l'ordonnancement
Syntaxe cron, pièges d'environnement, verrouillage des traitements concurrents et équivalents systemd timers.
- #automation
- #linux
- #troubleshooting
Syntaxe
┌ minute (0-59)
│ ┌ heure (0-23)
│ │ ┌ jour du mois (1-31)
│ │ │ ┌ mois (1-12)
│ │ │ │ ┌ jour de semaine (0-7, 0 et 7 = dimanche)
│ │ │ │ │
30 2 * * 1-5 /opt/batch/export.sh
| Expression | Signification |
|---|---|
*/15 * * * * | toutes les 15 minutes |
0 */4 * * * | toutes les 4 heures |
0 6 1 * * | le 1er du mois à 6 h |
@reboot | au démarrage |
Où sont les tâches ?
crontab -l # utilisateur courant
sudo crontab -l -u www-data
ls /etc/cron.d /etc/cron.daily
cat /etc/crontab # format avec colonne utilisateur !
Dans /etc/cron.d/* et /etc/crontab, il y a une colonne utilisateur supplémentaire ; les fichiers de /etc/cron.d doivent appartenir à root, sans point dans le nom, et se terminer par un saut de ligne.
Pièges d'environnement
PATHminimal (/usr/bin:/bin) → chemins absolus ouPATH=en tête du crontab.- Pas de profil shell chargé ;
%doit être échappé (\%). - Sortie perdue : rediriger
>> /var/log/batch/export.log 2>&1.
Éviter les exécutions concurrentes
*/5 * * * * flock -n /run/lock/export.lock /opt/batch/export.sh
Chaîner avec dépendances
/opt/batch/extract.sh && /opt/batch/transform.sh && /opt/batch/load.sh \
|| logger -t batch "chaîne nocturne en échec"
Diagnostic
grep CRON /var/log/syslog | tail
journalctl -u cron --since today
Équivalent systemd timer
# /etc/systemd/system/export.timer
[Timer]
OnCalendar=Mon..Fri 02:30
Persistent=true # rattrape une exécution manquée (serveur éteint)
[Install]
WantedBy=timers.target
Avantages : journaux dans journald, dépendances, isolation, systemctl list-timers.