MDstable
NoteSnippetChecklistPlaybook

Cron & Automatisation Linux

Planifier des tâches avec cron, at, et les timers systemd

snippetbeginner 2025-05-10 3 min read
linuxcroncrontabsystemd-timerautomationscheduling

Crontab

bash
Variables
{{USER}}
# Éditer la crontab de l'utilisateur courant
crontab -e
# Éditer la crontab d'un autre utilisateur (root)
crontab -u {{USER}} -e
# Lister les tâches
crontab -l
crontab -u {{USER}} -l
# Supprimer toutes les tâches
crontab -r

Syntaxe cron

minute 0-59)
heure 0-23)
jour du mois 1-31)
mois 1-12)
jour de la semaine 0-7, 0 et 7 dimanche
commande
# Exemples
0 2 /opt/backup.sh # tous les jours à 2h00
/15 /usr/bin/check.sh # toutes les 15 minutes
0 9 1-5 /scripts/report.sh # lundi-vendredi à 9h
0 0 1 /scripts/monthly.sh # 1er du mois à minuit
reboot /opt/start-agent.sh # au démarrage
daily /opt/cleanup.sh # 1x par jour (= 0 0 * * *)
hourly /opt/sync.sh # 1x par heure

Variables d'environnement en crontab

bash
Variables
{{EMAIL}}
# Définir des variables en haut de la crontab
SHELL/bin/bash
PATH/usr/local/sbin/usr/local/bin/usr/sbin/usr/bin/sbin/bin
MAILTO{{EMAIL}} # envoyer les erreurs par email (vide = pas d'email)
# Exemple complet
MAILTO""
0 3 /opt/backup.sh >> /var/log/backup.log 2>&1

Cron système

bash
# Fichiers de cron système
/etc/crontab # crontab système (avec champ user)
/etc/cron.d/ # fichiers de cron par application
/etc/cron.daily/ # scripts exécutés quotidiennement
/etc/cron.weekly/ # scripts exécutés hebdomadairement
/etc/cron.monthly/ # scripts exécutés mensuellement
/etc/cron.hourly/ # scripts exécutés toutes les heures
# Format /etc/crontab (avec champ utilisateur)
0 2 root /opt/backup.sh
# Placer un script dans cron.daily (doit être exécutable, sans extension)
cp backupsh /etc/cron.daily/backup
chmod x /etc/cron.daily/backup

Logs cron

bash
# Voir les exécutions cron
grep CRON /var/log/syslog
journalctl -u cron
journalctl -u crond
# Tester si un script marche en cron (simuler l'env)
env -i HOME/root SHELL/bin/sh /bin/sh -c "votre_commande"

at — Tâche unique planifiée

bash
Variables
{{JOB_ID}}
# Exécuter à une heure précise
echo "/opt/deploy.sh" | at 1430
echo "/opt/deploy.sh" | at 230 PM
# Demain ou dans X temps
echo "commande" | at tomorrow
echo "commande" | at now 2 hours
echo "commande" | at now 30 minutes
# Lister les tâches at
atq
# Supprimer une tâche at
atrm {{JOB_ID}}

Timers systemd — alternative moderne

bash
# Créer un service à déclencher
# /etc/systemd/system/backup.service
Unit
DescriptionBackup quotidien
Service
Typeoneshot
ExecStart/opt/backup.sh
Userbackup
# Créer le timer associé
# /etc/systemd/system/backup.timer
Unit
DescriptionDclencheur backup quotidien
Timer
OnCalendar 020000 # tous les jours à 2h
Persistenttrue # rattraper si la machine était éteinte
Install
WantedBytimerstarget
bash
# Activer et démarrer
systemctl daemon-reload
systemctl enable backuptimer
systemctl start backuptimer
# Voir tous les timers
systemctl list-timers
# Prochain déclenchement
systemctl list-timers backuptimer
# Tester le service sans attendre
systemctl start backupservice

Syntaxe OnCalendar

bash
OnCalendardaily # chaque jour à minuit
OnCalendarweekly # chaque lundi à minuit
OnCalendarMon 090000 # chaque lundi à 9h
OnCalendar0/15 # toutes les 15 minutes
OnCalendar2025-05-01 1200 # date précise
OnCalendar-01 000000 # 1er du mois
# Vérifier la syntaxe
systemd-analyze calendar "Mon *-*-* 09:00:00"
💡 Tip —

Les timers systemd sont préférables à cron pour les services car ils loguent dans journald, gèrent les dépendances et peuvent rattraper les exécutions manquées (Persistent=true). Cron reste plus simple pour les scripts ponctuels.

OPS·BRAIN v1.09 notes · SysAdminlocal