linuxcroncrontab
MDstable
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 courantcrontab -e# Éditer la crontab d'un autre utilisateur (root)crontab -u {{USER}} -e# Lister les tâchescrontab -lcrontab -u {{USER}} -l# Supprimer toutes les tâchescrontab -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 dimanchecommande# Exemples0 2 /opt/backup.sh # tous les jours à 2h00/15 /usr/bin/check.sh # toutes les 15 minutes0 9 1-5 /scripts/report.sh # lundi-vendredi à 9h0 0 1 /scripts/monthly.sh # 1er du mois à minuitreboot /opt/start-agent.sh # au démarragedaily /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 crontabSHELL/bin/bashPATH/usr/local/sbin/usr/local/bin/usr/sbin/usr/bin/sbin/binMAILTO{{EMAIL}} # envoyer les erreurs par email (vide = pas d'email)# Exemple completMAILTO""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/backupchmod x /etc/cron.daily/backup
Logs cron
bash
# Voir les exécutions crongrep CRON /var/log/syslogjournalctl -u cronjournalctl -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éciseecho "/opt/deploy.sh" | at 1430echo "/opt/deploy.sh" | at 230 PM# Demain ou dans X tempsecho "commande" | at tomorrowecho "commande" | at now 2 hoursecho "commande" | at now 30 minutes# Lister les tâches atatq# Supprimer une tâche atatrm {{JOB_ID}}
Timers systemd — alternative moderne
bash
# Créer un service à déclencher# /etc/systemd/system/backup.serviceUnitDescriptionBackup quotidienServiceTypeoneshotExecStart/opt/backup.shUserbackup# Créer le timer associé# /etc/systemd/system/backup.timerUnitDescriptionDclencheur backup quotidienTimerOnCalendar 020000 # tous les jours à 2hPersistenttrue # rattraper si la machine était éteinteInstallWantedBytimerstarget
bash
# Activer et démarrersystemctl daemon-reloadsystemctl enable backuptimersystemctl start backuptimer# Voir tous les timerssystemctl list-timers# Prochain déclenchementsystemctl list-timers backuptimer# Tester le service sans attendresystemctl start backupservice
Syntaxe OnCalendar
bash
OnCalendardaily # chaque jour à minuitOnCalendarweekly # chaque lundi à minuitOnCalendarMon 090000 # chaque lundi à 9hOnCalendar0/15 # toutes les 15 minutesOnCalendar2025-05-01 1200 # date préciseOnCalendar-01 000000 # 1er du mois# Vérifier la syntaxesystemd-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