Skip to Content
DocumentationExploitationAdministration systèmeTâches planifiées

Tâches planifiées

Les tâches planifiées vous permettent d’exécuter automatiquement des commandes ou des scripts à des heures spécifiées. Ubuntu 26.04 prend en charge deux méthodes : le cron traditionnel et les minuteries systemd plus modernes.

Les bases de crontab

Gestion de crontab

# Edit the current user's crontab crontab -e # View the current user's crontab crontab -l # Delete the current user's crontab crontab -r # Edit another user's crontab (requires root) sudo crontab -u username -e # View another user's crontab sudo crontab -u username -l

Syntaxe du temps cron

Une expression cron se compose de 5 champs temporels :

┌──────── Minute (0-59) │ ┌────── Hour (0-23) │ │ ┌──── Day of month (1-31) │ │ │ ┌── Month (1-12) │ │ │ │ ┌ Day of week (0-7, both 0 and 7 mean Sunday) │ │ │ │ │ * * * * * command

Caractères spéciaux

CaractèreDescriptifExemple
*N’importe quelle valeur* * * * * toutes les minutes
,Plusieurs valeurs1,15,30 * * * * aux minutes 1, 15 et 30
-Gamme1-5 * * * * minutes 1 à 5
/Étape*/10 * * * * toutes les 10 minutes

Exemples courants

# Run every minute * * * * * /path/to/script.sh # Run every hour (on the hour) 0 * * * * /path/to/script.sh # Run daily at 3:00 AM 0 3 * * * /path/to/script.sh # Run daily at 3:30 AM 30 3 * * * /path/to/script.sh # Run every Monday at 2:00 AM 0 2 * * 1 /path/to/script.sh # Run on the 1st of every month at midnight 0 0 1 * * /path/to/script.sh # Run every 5 minutes */5 * * * * /path/to/script.sh # Run at minutes 15 and 45 of every hour 15,45 * * * * /path/to/script.sh # Run weekdays (Monday-Friday) at 9:00 AM 0 9 * * 1-5 /path/to/script.sh # Run every hour from 8 AM to 6 PM daily 0 8-18 * * * /path/to/script.sh # Run every 6 months (1st of January and July) 0 0 1 1,7 * /path/to/script.sh

Mots-clés spéciaux

# Equivalent shortcuts @reboot # Run at system startup @yearly # Run yearly = 0 0 1 1 * @monthly # Run monthly = 0 0 1 * * @weekly # Run weekly = 0 0 * * 0 @daily # Run daily = 0 0 * * * @hourly # Run hourly = 0 * * * * # Usage examples @reboot /opt/myapp/start.sh @daily /usr/local/bin/daily-backup.sh

Conseils pratiques sur Cron

Variables d’environnement

L’environnement d’exécution cron diffère de l’environnement shell de l’utilisateur — des variables comme PATH peuvent être incomplètes :

# Set environment variables at the top of your crontab SHELL=/bin/bash PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin MAILTO=admin@example.com # Or use full paths in commands 0 3 * * * /usr/bin/rsync -av /source/ /backup/

Journalisation

# Redirect output to a log file 0 3 * * * /path/to/script.sh >> /var/log/myscript.log 2>&1 # Discard all output 0 3 * * * /path/to/script.sh > /dev/null 2>&1 # Log only errors 0 3 * * * /path/to/script.sh > /dev/null 2>> /var/log/myscript-error.log

Notifications par courrier électronique

# Set the email recipient in crontab MAILTO=admin@example.com # Disable email notifications MAILTO=""

Affichage des journaux cron

# View via journalctl journalctl -u cron.service # Or check syslog grep CRON /var/log/syslog

Répertoires cron au niveau du système

Ubuntu propose plusieurs répertoires cron prédéfinis :

# Place scripts in the appropriate directory for automatic execution ls /etc/cron.hourly/ # Hourly ls /etc/cron.daily/ # Daily ls /etc/cron.weekly/ # Weekly ls /etc/cron.monthly/ # Monthly
# Add a script and ensure it has execute permission sudo cp myscript.sh /etc/cron.daily/ sudo chmod +x /etc/cron.daily/myscript.sh

Le fichier de configuration cron au niveau du système /etc/crontab :

cat /etc/crontab
SHELL=/bin/sh PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin # m h dom mon dow user command 17 * * * * root cd / && run-parts --report /etc/cron.hourly 25 6 * * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily ) 47 6 * * 7 root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly ) 52 6 1 * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly )

Minuteries systemd

Les minuteries systemd sont une alternative moderne à cron, offrant un contrôle du temps plus précis et une meilleure prise en charge de la journalisation.

Affichage des minuteries existantes

# List all active timers systemctl list-timers --all # Example output: # NEXT LEFT LAST PASSED UNIT ACTIVATES # Tue 2026-03-24 06:00:00 CST 2h left Mon 2026-03-23 06:00:00 CST 22h ago apt-daily.timer apt-daily.service

Création d’une minuterie personnalisée

La création d’un minuteur nécessite deux fichiers : un fichier .service et un fichier .timer.

Étape 1 : Créez le fichier de service

sudo nano /etc/systemd/system/my-backup.service
[Unit] Description=Daily Backup Job [Service] Type=oneshot ExecStart=/usr/local/bin/daily-backup.sh User=root StandardOutput=journal StandardError=journal

Étape 2 : Créez le fichier de minuterie

sudo nano /etc/systemd/system/my-backup.timer
[Unit] Description=Run Daily Backup at 3 AM [Timer] OnCalendar=*-*-* 03:00:00 Persistent=true RandomizedDelaySec=300 [Install] WantedBy=timers.target

Étape 3 : Activer la minuterie

sudo systemctl daemon-reload sudo systemctl enable --now my-backup.timer # Verify systemctl list-timers | grep my-backup # Manually trigger a test run sudo systemctl start my-backup.service # View execution logs journalctl -u my-backup.service

Expressions de temps OnCalendar

# Daily at 3 AM OnCalendar=*-*-* 03:00:00 # Every Monday at 9 AM OnCalendar=Mon *-*-* 09:00:00 # 1st of every month OnCalendar=*-*-01 00:00:00 # Weekdays at 8 AM OnCalendar=Mon..Fri *-*-* 08:00:00 # Every 15 minutes OnCalendar=*:0/15 # Every hour OnCalendar=hourly # Every day OnCalendar=daily # Every week OnCalendar=weekly

Vérifiez les expressions temporelles :

# Test an expression and see upcoming trigger times systemd-analyze calendar "Mon..Fri *-*-* 08:00:00" systemd-analyze calendar "*:0/15"

Minuteries basées sur des événements

En plus de la planification basée sur le calendrier, vous pouvez déclencher en fonction d’événements :

[Timer] # Run 5 minutes after system boot OnBootSec=5min # Run 1 hour after the last execution completed OnUnitActiveSec=1h # Combined usage OnBootSec=10min OnUnitActiveSec=1h

Minuteries transitoires (exécution différée unique)

# Run a command after 30 minutes systemd-run --on-active=30m /usr/local/bin/task.sh # Run at a specific time systemd-run --on-calendar="2026-03-25 10:00:00" /usr/local/bin/task.sh

Comparaison des minuteries cron et systemd

Caractéristiquecronminuteries système
Complexité de configurationSimple, une ligneNécessite deux fichiers
JournalisationConfiguration manuelle requiseIntégré à journalctl
Gestion des dépendancesNon pris en chargePrend en charge les dépendances de service
PrécisionL’unité minimale est en minutesPrécis à la seconde près
Tâches manquéesNon exécutéPersistent=true rattrape son retard
Contrôle des ressourcesNon pris en chargePrend en charge les limites de ressources du groupe de contrôle
Délai aléatoireNon pris en chargeRandomizedDelaySec

Meilleures pratiques

  1. Utilisez cron pour les tâches planifiées simples, les minuteries systemd pour les tâches complexes.
  2. Toujours enregistrer la sortie pour faciliter le dépannage.
  3. Utilisez des chemins complets pour éviter les problèmes de PATH.
  4. Empêcher le chevauchement des tâches : les tâches de longue durée doivent utiliser le verrouillage :
# Use flock to prevent task overlap * * * * * /usr/bin/flock -n /tmp/myjob.lock /path/to/script.sh
  1. Testez avant le déploiement : exécutez d’abord les scripts manuellement pour confirmer qu’ils fonctionnent correctement.