Ce que vous allez faire
À la fin de ce tutoriel vous disposerez d’une crontab qui exécute une commande toutes les heures, d’un timer systemd équivalent, d’une journalisation complète via journalctl et d’un verrou flock qui empêche toute exécution simultanée. Le tout est opérationnel en moins de trente minutes sur un serveur Linux standard.
Prérequis
- Serveur Linux avec cron et systemd installés (la plupart des distributions récentes)
- Accès root ou sudo pour éditer les crontabs et les unités
- Connexion SSH persistante pendant les tests
- Commande flock disponible (paquet util-linux)
- 15 à 30 minutes
Étape 1 — Créer une tâche cron simple
Ouvrez la crontab de l’utilisateur courant et ajoutez une entrée qui lance un script de sauvegarde toutes les heures. Cette première étape pose les bases avant d’ajouter la protection contre les chevauchements.
crontab -e
0 * * * * /usr/local/bin/backup.sh >> /var/log/backup.log 2>&1Étape 2 — Éviter les exécutions qui se chevauchent avec flock
Ajoutez flock pour garantir qu’une seconde instance ne démarre pas tant que la première n’est pas terminée. Le verrou est placé dans /var/lock afin d’être visible par tous les utilisateurs.
0 * * * * flock -n /var/lock/backup.lock /usr/local/bin/backup.sh >> /var/log/backup.log 2>&1Étape 3 — Journaliser la sortie avec journalctl
Remplacez la redirection vers un fichier par logger pour centraliser les traces dans le journal systemd. Cela facilite le filtrage et la rotation automatique.
0 * * * * flock -n /var/lock/backup.lock /usr/local/bin/backup.sh 2>&1 | logger -t backupÉtape 4 — Créer un timer systemd équivalent
Créez une unité de service puis un timer pour remplacer la crontab lorsque vous avez besoin de dépendances ou de redémarrage automatique.
# /etc/systemd/system/backup.service
[Unit]
Description=Backup service
[Service]
Type=oneshot
ExecStart=/usr/local/bin/backup.sh# /etc/systemd/system/backup.timer
[Unit]
Description=Run backup hourly
[Timer]
OnCalendar=hourly
Persistent=true
[Install]
WantedBy=timers.targetsudo systemctl daemon-reload
sudo systemctl enable --now backup.timerÉtape 5 — Consulter les logs et tester le timer
Vérifiez le statut du timer et consultez les journaux pour confirmer que les exécutions sont bien tracées et non chevauchées.
systemctl list-timers backup.timer
journalctl -u backup.service -n 20Vérifier que tout fonctionne
Exécutez manuellement le timer et observez le journal :
sudo systemctl start backup.timer
journalctl -u backup.service --since "5 minutes ago"Erreurs fréquentes
La tâche ne s’exécute jamais
Vérifiez le chemin absolu des commandes et des scripts dans la crontab ou l’unité systemd. Utilisez which pour obtenir le chemin complet.
Deux instances tournent en même temps
Ajoutez l’option -n à flock ou supprimez le fichier de verrou avant de relancer. Vérifiez avec ps aux | grep backup.
Aucun log n’apparaît dans journalctl
Ajoutez StandardOutput=journal dans la section [Service] de l’unité ou utilisez logger dans la crontab.
Aller plus loin
Passez aux timers systemd avec OnCalendar étendu, ajoutez des conditions Requires ou After, puis explorez les unités de type path pour déclencher sur modification de fichier.
Se former avec Learni
Formation Planification et l'automatisation des tâches avec Cron sous Linux
Administrateurs système et ingénieurs DevOps qui souhaitent créer et gérer des crontabs complexes. 1 journée, niveau Intermédiaire, présentiel, 1490 € HT par participant. Détails de la formation
Formation systemd Avancée - Gérer unités et dépendances
Administrateurs Linux confirmés qui migrent des services vers systemd en production. 3 journées, niveau Avancée, présentiel, 3990 € HT par participant. Détails de la formation
Formation Quartz Scheduler : Planification et automatisation des tâches Java
Développeurs Java qui intègrent la planification de jobs dans leurs applications. 2 journées, niveau Intermédiaire, présentiel, 2690 € HT par participant. Détails de la formation
FAQ
Comment journaliser une tâche cron avec journalctl ?
Remplacez la redirection fichier par | logger -t backup dans la crontab. Les messages apparaissent ensuite via journalctl -t backup.
Flock empêche-t-il les chevauchements sur systemd timer ?
Oui. Placez flock dans ExecStart de l’unité service ou utilisez Type=oneshot avec le verrou pour les timers.
Quelle est la différence entre cron et un timer systemd ?
Cron gère uniquement la planification horaire. Systemd timer ajoute dépendances, redémarrage automatique et journalisation native via journalctl.
Comment tester un timer sans attendre l’heure planifiée ?
Exécutez sudo systemctl start backup.timer puis journalctl -u backup.service pour voir le résultat immédiat.


