Planification de tâches avec les timers systemd
Mise à jour :
Lorsque l’on cherche à automatiser des tâches sur un système Linux, le réflexe courant est de se tourner vers cron. Bien que fiable et largement utilisé, cron présente des limites, notamment lorsqu’il s’agit de suivre l’état des tâches ou d’interagir avec les services systemd. C’est ici que les Systemd Timers entrent en jeu, offrant une solution plus flexible et intégrée.
Les Systemd Timers permettent de planifier et d’automatiser des actions en tirant parti des fonctionnalités avancées de systemd, l’initiateur de services par défaut sur la plupart des distributions Linux modernes. Contrairement à cron, un Systemd Timer est intimement lié à un service systemd, ce qui permet de suivre facilement l’état de la tâche, d’obtenir des journaux détaillés et de gérer les erreurs avec plus de précision.
Fonctionnement des Systemd Timers
Les Systemd Timers fonctionnent en collaboration étroite avec les services systemd pour déclencher des tâches de manière programmée. À la différence des tâches cron, qui se contentent de lancer des commandes à des intervalles définis, un Systemd Timer est lié à un service systemd. En d’autres termes, le timer agit comme un déclencheur, tandis que le service est la tâche ou l’action qui sera exécutée lorsque le timer se déclenchera.
Chaque Systemd Timer se compose donc de deux fichiers principaux :
- Un fichier
.timer
qui définit l’intervalle ou le calendrier de déclenchement. - Un fichier
.service
qui précise la commande ou le processus à exécuter.
Voici comment cela fonctionne concrètement : lorsque le timer arrive à l’instant programmé, il « active » le service associé, qui exécute alors la tâche spécifiée. Par exemple, si vous avez un timer configuré pour s’exécuter tous les jours à 3h du matin, il activera le service correspondant, qui pourra, par exemple, lancer un script de sauvegarde ou nettoyer des logs. Ce lien étroit entre le timer et le service assure une exécution structurée et bien organisée des tâches.
L’architecture des Systemd Timers permet également de bénéficier de tous les avantages de systemd, notamment :
- Le suivi des états et des journaux : Vous pouvez facilement vérifier si le
timer s’est exécuté correctement et consulter les logs pour chaque
exécution via des commandes systemd comme
journalctl
. - Une gestion des erreurs plus poussée : Si une tâche échoue, le Systemd Timer peut tenter de la relancer ou de fournir des rapports d’erreur détaillés.
- Un contrôle précis des conditions d’exécution : Les timers peuvent être configurés pour s’exécuter seulement si certaines conditions sont remplies, comme la présence d’un réseau ou l’état de veille du système.
Types de Systemd Timers
Il existe deux principaux types de Systemd Timers : les OnCalendar timers et les Monotonic timers. Chacun de ces types de timers répond à des besoins différents en matière de planification de tâches automatisées. Selon le cas d’utilisation, l’un ou l’autre peut être plus adapté.
OnCalendar Timers
Les OnCalendar timers permettent de programmer des tâches sur la base d’une date et d’une heure précises. Ils fonctionnent de manière similaire aux tâches cron, mais avec une syntaxe plus souple et compréhensible, comme “tous les lundis à 6h” ou “le premier jour de chaque mois à minuit”. Ces timers sont parfaits pour les tâches qui nécessitent une exécution planifiée, comme une sauvegarde quotidienne ou une analyse mensuelle.
Par exemple, pour un timer qui déclenche une tâche tous les jours à 6h, la configuration serait :
Les OnCalendar timers utilisent une syntaxe flexible, permettant des combinaisons telles que :
Mon *-*-* 6:00
pour tous les lundis à 6h,*-01-01 00:00
pour chaque 1er janvier à minuit.
Cette flexibilité rend les OnCalendar timers très utiles pour automatiser des tâches avec des conditions temporelles précises.
Monotonic Timers
Les Monotonic timers, en revanche, déclenchent des tâches après un certain intervalle à partir d’un événement donné, comme le démarrage du système ou l’activation d’un service. Ces timers sont utiles pour les tâches qui doivent se répéter régulièrement sans être associées à une date ou une heure fixe. Ils sont fréquemment utilisés pour des processus d’entretien, comme une vérification de l’état des services toutes les 5 minutes après le démarrage du système.
Les paramètres des Monotonic timers incluent :
OnBootSec
: défini un délai après le démarrage du système,OnUnitActiveSec
: programme un intervalle après la dernière activation du timer.
Par exemple, pour un timer qui exécute une tâche toutes les 10 minutes après le démarrage :
Cette configuration exécutera la tâche au démarrage, puis toutes les 10 minutes par la suite. Les Monotonic timers sont particulièrement utiles pour des opérations répétitives qui ne nécessitent pas de planification fixe, comme la synchronisation régulière de données.
Choisir le bon type de Timer
En fonction des besoins, les OnCalendar timers conviennent mieux pour des actions programmées à des moments précis, tandis que les Monotonic timers sont idéaux pour des tâches répétées à intervalles. Grâce à ces deux types, Systemd Timers offrent une flexibilité accrue pour répondre à divers scénarios d’automatisation dans un environnement Linux.
Analyser un Timer existant
Avant de se lancer dans la créaion d’un nouveau timer, il est souvent utile
d’analyser un timer existant pour comprendre comment il est configuré et
comment il fonctionne. Nous allons utiliser le timer apt-daily.timer
.
Le timer apt-daily est un Systemd Timer configuré par défaut sur les
systèmes basés sur Debian et Ubuntu pour automatiser les mises à jour de
paquets. Ce timer déclenche le service apt-daily.service, responsable de la
mise à jour des listes de paquets, et apt-daily-upgrade.service, pour
appliquer des mises à jour de sécurité. Dans ce chapitre, je vais vous montrer
comment utiliser la commande systemctl
pour vérifier, comprendre, et gérer ce
timer.
La première étape pour comprendre le timer apt-daily consiste à vérifier son état avec la commande :
Cette commande vous permet de voir des informations telles que la dernière exécution, l’état actuel, et le prochain déclenchement programmé du timer apt-daily.
Pour savoir exactement quand le timer apt-daily se déclenche, la commande suivante est utile :
Cette commande affiche les informations de planification pour apt-daily.timer ainsi que pour d’autres timers actifs, comme la dernière exécution et le moment prévu pour la prochaine. Vous verrez ainsi si apt-daily s’exécute quotidiennement ou à des intervalles particuliers.
Pour comprendre la configuration précise du timer apt-daily, vous pouvez
consulter son fichier .timer
dans /lib/systemd/system/apt-daily.timer
.
Utilisez un éditeur de texte ou une commande de lecture rapide comme cat
:
Le contenu devrait ressembler à ceci :
- OnCalendar=-- 6,18:00* indique que le timer est programmé pour s’exécuter deux fois par jour, à 6h et à 18h.
- RandomizedDelaySec=12h signifie que le timer peut varier dans un intervalle de 12 heures pour éviter que les mises à jour de tous les systèmes se produisent au même moment, réduisant la charge des serveurs de mise à jour.
Le timer apt-daily déclenche le service apt-daily.service pour la mise à jour des listes de paquets. Pour vérifier l’état de ce service et s’assurer qu’il s’exécute correctement, utilisez :
Cette commande vous donne des informations sur l’exécution actuelle ou passée du service et si des erreurs ont été rencontrées.
Si vous souhaitez désactiver temporairement le timer apt-daily pour éviter qu’il ne se déclenche automatiquement, vous pouvez utiliser la commande suivante :
Pour empêcher le timer de se lancer automatiquement au démarrage, désactivez-le avec :
Pour réactiver le timer apt-daily et lui permettre de se lancer automatiquement au démarrage, utilisez les commandes :
Ces commandes remettront le timer en état de fonctionnement avec la planification par défaut.
Pour diagnostiquer les erreurs ou vérifier les actions du service apt-daily,
les journaux peuvent fournir des informations précieuses. Utilisez journalctl
pour afficher les journaux du service :
Cette commande montre les entrées de journal de chaque exécution du service apt-daily, notamment les mises à jour réussies, les mises à jour manquées et toute autre erreur qui pourrait avoir empêché l’exécution correcte.
Créer un Systemd Timer
Pour créer un Systemd Timer au niveau utilisateur, le processus est très similaire à la création d’un timer système, mais les fichiers de configuration sont placés dans le répertoire personnel de l’utilisateur, et les commandes sont exécutées sans privilèges root. Voici les étapes pour configurer et activer un Systemd Timer utilisateur.
Les Systemd Timers utilisateurs sont stockés dans le répertoire
~/.config/systemd/user/
. Si ce répertoire n’existe pas, vous pouvez le créer
avec la commande suivante :
Dans le répertoire ~/.config/systemd/user/
, créez un fichier .timer
qui
définira le moment où la tâche doit s’exécuter. Par exemple, pour créer un
timer qui lance une tâche tous les jours à 7h du matin, vous pouvez utiliser
le fichier daily-task.timer
:
- OnCalendar=-- 7:00* définit l’heure d’exécution de la tâche, ici tous les jours à 7h.
- Persistent=true permet au timer de rattraper les exécutions manquées si le système était hors ligne.
- WantedBy=default.target garantit que le timer est activé dans l’environnement utilisateur.
Enregistrez ce fichier sous ~/.config/systemd/user/daily-task.timer
.
Ensuite, créez un fichier .service
correspondant dans le même répertoire pour
spécifier la tâche à exécuter. Par exemple, daily-task.service
:
- Type=oneshot indique que le service exécute une tâche unique puis se termine.
- ExecStart= spécifie le chemin vers le script ou la commande que vous souhaitez exécuter.
Enregistrez ce fichier sous ~/.config/systemd/user/daily-task.service
.
Pour prendre en compte les nouveaux fichiers, rechargez les unités systemd de l’utilisateur avec la commande suivante :
Ensuite, activez le timer pour qu’il démarre automatiquement à chaque connexion de l’utilisateur :
Vous pouvez aussi démarrer le timer immédiatement pour vérifier qu’il fonctionne :
Pour vérifier que le timer est correctement configuré et actif, utilisez :
Cette commande vous permet de consulter l’état actuel du timer, la dernière exécution, et la prochaine planification.
Exemple d’utilisation des Timers utilisateurs
Les Systemd Timers au niveau utilisateur sont utiles pour des tâches telles que :
- Des scripts de nettoyage dans le répertoire personnel.
- Des notifications de rappels automatiques.
- Des synchronisations de fichiers entre des dossiers locaux et distants.
Conclusion
Les Systemd Timers constituent une solution moderne et puissante pour l’automatisation des tâches sous Linux, surpassant les traditionnels cron jobs en offrant une intégration plus poussée avec les services systemd et en proposant des fonctionnalités avancées telles que la récupération des exécutions manquées, des options de conditions d’exécution, et une meilleure gestion des permissions.
Grâce à la flexibilité de leurs deux principaux types – les OnCalendar timers pour les tâches à horaires fixes et les Monotonic timers pour les intervalles basés sur des événements – les Systemd Timers permettent de configurer des automatisations précises, adaptées aux besoins spécifiques de chaque environnement. Qu’il s’agisse de tâches de sauvegarde, de nettoyage, de surveillance, ou même de mises à jour, ils offrent une solution fiable et robuste pour gérer les processus récurrents.
En maîtrisant les Systemd Timers, vous disposez d’un outil essentiel pour optimiser vos environnements Linux, réduire l’intervention manuelle, et assurer une maintenance efficace. Ce guide vous donne toutes les clés pour configurer et exploiter pleinement les timers dans vos projets d’administration système.