Introduction
Les minuteries systemd constituent un mécanisme puissant dans les environnements Linux pour planifier l'exécution de tâches à des intervalles ou des moments précis. En tant que composant du gestionnaire de services systemd, elles offrent une alternative flexible et fiable aux outils traditionnels comme cron, avec une meilleure intégration au système et une récupération automatique après les redémarrages.
Les minuteries systemd se distinguent par leur précision accrue dans la planification, leur capacité à définir des périodes d'exécution complexes et leur facilité de débogage. Pour les configurer, il faut créer des fichiers d'unité de minuterie (.timer) et des fichiers d'unité de service (.service) qui décrivent la tâche à exécuter et les conditions de déclenchement. Une fois activées, ces minuteries déclenchent automatiquement les services associés selon les paramètres définis, ce qui simplifie l'automatisation de tâches systèmes telles que les sauvegardes, le nettoyage de fichiers ou l'envoi de notifications.
Minuterie monotone
Étape 1 : Création du script de tâche
Pour une minuterie monotone, qui s'exécute à intervalles réguliers après un événement système, commencez par créer un script d'exécution. Placez-le dans un répertoire personnalisé, par exemple /opt/scripts/, avec le nom routine.sh.
#!/bin/bash
echo "$(date)" >> /var/log/monologue.txt
Ce script enregistre l'horodatage actuel dans un fichier journal, simulant une tâche périodique. Assurez-vous qu'il est exécutable avec la commande chmod +x /opt/scripts/routine.sh.
Étape 2 : Fichier d'unité de minuterie
Créez un fichier d'unité de minuterie dans /etc/systemd/system/, nommé intervalle.timer, avec le contenu suivant :
[Unit]
Description=Minuterie pour tâches périodiques
[Timer]
OnUnitActiveSec=5s
AccuracySec=1us
Unit=intervalle.service
[Install]
WantedBy=multi-user.target
Ici, OnUnitActiveSec=5s spécifie un intervalle de 5 secondes après l'activation de l'unité, et AccuracySec=1us définit une haute précision. Le champ Unit référence le fichier de service associé.
Étape 3 : Fichier d'unité de service
Créez un fichier de service correspondant, intervalle.service, dans le même répertoire :
[Unit]
Description=Service pour exécuter la tâche périodique
[Service]
Type=simple
ExecStart=/bin/bash /opt/scripts/routine.sh
Le type simple (par défaut) indique que le service reste actif. Si vous utilisez oneshot, le service s'exécutera une seule fois, et la minuterie pourra être désactivée après exécution.
Étape 4 : Rechargement et activation
Pour appliquer les modifications, rechargez les unités systemd avec :
systemctl daemon-reload
Ensuite, activez et démarrez la minuterie pour qu'elle soit opérationnelle au démarrage :
systemctl enable intervalle.timer
systemctl start intervalle.timer
Vérifiez son statut avec systemctl status intervalle.timer pour confirmer qu'elle est active.
Vérification des résultats
Pour observer l'exécution de la tâche, suivez le fichier journal créé précédemment :
tail -f /var/log/monologue.txt
L'apparition de nouveaux horodatages confirme le bon fonctionnement de la minuterie.
Minuterie calendrier
Les minuteries calendrier permettent de planifier des tâches selon des dates ou heures spécifiques, comme une exécution hebdomadaire. Pour configurer une sauvegarde tous les dimanches à 2h du matin, modifiez le fichier de minuterie pour utiliser OnCalendar :
[Unit]
Description=Minuterie pour sauvegarde hebdomadaire
[Timer]
OnCalendar=sun,02:00
Persistent=true
[Install]
WantedBy=multi-user.target
L'option Persistent=true garantit l'exécution des tâches manquées, par exemple après un arrêt du système. Le reste de la configuration (service et activation) reste identique à l'exemple précédent.