Utilisation des minuteries dans Systemd
Explique comment les unités de minuterie programmées fonctionnent et comment configurer les minuteries en temps réel, monotones et transitoires.
Les fichiers d'unité de temporisateur sont un type de fichier systemd que l'utilitaire systemctl utilise pour programmer des tâches, comme l'utilitaire cron qui utilise crontab et d'autres tâches cron à la même fin.
Notez que le démon cron s'exécute en tant que service dans systemd, de sorte que les unités de minuterie sont préférées car elles suppriment une couche de traitement supplémentaire et offrent beaucoup plus d'utilité et une configuration plus granulaire que celle disponible dans le service cron.
En général, les packages qui utilisent des services spécifiques pour fonctionner dans le système incluent leurs propres fichiers d'unité de temporisateur systemd. Ainsi, lorsque ces ensembles sont installés avec Oracle Linux, les fichiers d'unité de minuterie sont automatiquement inclus. Vous pouvez afficher les fichiers de temporisateur sur le système à l'aide de la commande suivante :
systemctl list-unit-files --type=timer
La liste des fichiers de temporisateur peut varier selon l'endroit où Oracle Linux est exécuté, par exemple dans une instance d'Oracle Cloud Infrastructure, un système physique, etc.
Chaque fichier d'unité de minuterie contient des paramètres qui gèrent la planification d'une tâche. Par exemple, la programmation de l'exécution de dnf-makecache.service est définie dans le fichier dnf-makecache.timer. Le fichier contient les paramètres suivants :
systemctl cat dnf-makecache.timer
# /usr/lib/systemd/system/dnf-makecache.timer
[Unit]
Description=dnf makecache --timer
ConditionKernelCommandLine=!rd.live.image
# See comment in dnf-makecache.service
ConditionPathExists=!/run/ostree-booted
Wants=network-online.target
[Timer]
OnBootSec=10min
OnUnitInactiveSec=1h
RandomizedDelaySec=60m
Unit=dnf-makecache.service
[Install]
WantedBy=timers.target
Les informations sur la programmation sont spécifiées dans la section [Timer].
Dans l'exemple de configuration, le service dnf-makecache.service est réglé pour s'exécuter automatiquement 10 minutes après le démarrage du système. Le service passe ensuite en mode inactif pendant une heure, comme spécifié par le paramètre OnUnitInactiveSec. À la fin de l'heure, le service s'exécute de nouveau. Ce cycle se poursuit toutes les heures indéfiniment.
Le paramètre RandomizedDelaySec fournit une limite de valeur pour le retard d'une exécution au-delà de sa programmation.
Dans l'exemple, le service est autorisé à s'exécuter une minute plus tard que sa programmation. Ce paramètre est utile pour empêcher un trop grand nombre de tâches qui commencent en même temps selon un programme spécifié, ce qui risquerait autrement de surcharger les ressources.
OnCalendar est un autre paramètre utile pour la programmation des tâches. Supposons que le paramètre soit défini comme suit :
OnCalendar=*:00/10
Le paramètre *:00 indique toutes les heures en haut de l'heure, tandis que le paramètre /10 indique 10 minutes. Par conséquent, le travail est configuré pour s'exécuter toutes les heures, dix minutes après le début de l'heure.
Pour obtenir la liste complète des paramètres de fichier d'unité de temporisateur systemd pour la programmation d'une tâche, voir les pages de manuel systemd.timer(5).
Pour un tutoriel sur l'utilisation de
systemd dans Oracle Linux, notamment sur la configuration des fichiers d'unité de temporisateur systemd, voir https://docs.oracle.com/en/learn/ol-systemd/.Utilisation des unités de minuterie pour contrôler le temps d'exécution des unités de service
Explique comment les unités de minuterie remplacent les tâches cron et comment inspecter, activer et surveiller les services déclenchés par une minuterie.
Les unités de minuterie peuvent être configurées pour contrôler l'exécution des unités de service.
Vous pouvez utiliser des unités de temporisateur au lieu de configurer le démon cron pour les événements basés sur le temps. Les unités de minuterie peuvent être plus compliquées à configurer que la création d'une entrée crontab. Cependant, les unités de minuterie sont plus configurables et les services qu'elles contrôlent peuvent être configurés pour une meilleure journalisation et une intégration plus approfondie avec l'architecture systemd.
Les unités de minuterie sont démarrées, activées et arrêtées de la même manière que les unités de service. Par exemple, pour activer et démarrer une unité de minuterie immédiatement, tapez :
sudo systemctl enable --now myscript.timer
Pour lister tous les temporisateurs existants sur le système, pour voir quand ils ont été exécutés pour la dernière fois et quand ils sont configurés pour l'exécution suivante, tapez :
systemctl list-timers
Pour plus d'informations sur les temporisateurs système, consultez les pages de manuel systemd.timer(5) et systemd.time(7).
Configuration d'une unité de minuterie en temps réel
Les temporisateurs en temps réel s'activent pour un événement de calendrier, comme pour les événements d'un crontab. L'option OnCalendar indique quand le temporisateur exécute un service.
-
Si nécessaire, créez un fichier
.servicequi définit le service à déclencher par l'unité de temporisateur. Dans la procédure suivante, l'exemple de service est/etc/systemd/system/update.service, qui est une unité de service qui exécute un script de mise à jour.Pour plus d'informations sur la création d'unités de service, voir Création d'un service systemd basé sur l'utilisateur.
-
Déterminez l'heure et la fréquence d'exécution du service. Dans cette procédure, le temporisateur est configuré pour exécuter le service toutes les 2 heures du lundi au vendredi.
Cette tâche vous montre comment créer un temporisateur système pour déclencher l'exécution d'un service en fonction d'un événement de calendrier. La définition de l'événement de calendrier est similaire aux entrées que vous placez dans une tâche cron.
Configuration d'une unité de minuterie monotonique
Les temporisateurs monotones s'activent après un intervalle de temps par rapport à un point de départ variable, tel qu'un événement d'initialisation, ou lorsqu'une unité systemd particulière devient active. Ces unités de minuterie s'arrêtent si l'ordinateur est temporairement suspendu ou arrêté. Les temporisateurs monotones sont configurés à l'aide de l'option OnTypeSec, où Type est le nom de l'événement auquel le temporisateur est lié. Les temporisateurs monotoniques courants comprennent OnBootSec et OnUnitActiveSec.
-
Si nécessaire, créez un fichier
.servicequi définit le service à déclencher par l'unité de temporisateur. Dans la procédure suivante, l'exemple de service est/etc/systemd/system/update.service, qui est une unité de service qui exécute un script de mise à jour.Pour plus d'informations sur la création d'unités de service, voir Création d'un service systemd basé sur l'utilisateur.
-
Déterminez l'heure et la fréquence d'exécution du service. Dans cette procédure, le temporisateur est configuré pour exécuter le service 10 minutes après un démarrage du système, et toutes les 2 heures à compter de la dernière activation du service.
Cette tâche vous montre comment créer un temporisateur système pour déclencher l'exécution d'un service lors d'événements spécifiques, c'est-à-dire lorsque le système démarre ou après 2 heures d'interruption de l'activation du temporisateur.
Exécution d'une unité de minuterie transitoire
Démontre comment lancer des temporisateurs ponctuels avec systemctl run afin que vous puissiez programmer des tâches ad hoc sans créer de fichiers d'unité.
Les temporisateurs transitoires sont des temporisateurs temporaires qui ne sont valides que pour la session en cours.
Ces temporisateurs peuvent être créés pour exécuter un programme ou un script directement sans nécessiter la configuration des unités de service ou de temporisateur dans systemd. Ces unités sont générées à l'aide de la commande systemd-run. Pour plus d'informations, voir la page de manuel systemd-run(1).
Les options de paramètre que vous ajouteriez au fichier unit-file.timer servent également d'arguments lorsque vous utilisez la commande systemd-run pour exécuter une unité de temporisateur transitoire.
Les exemples suivants montrent comment utiliser systemd-run pour activer les temporisateurs transitoires.
-
Exécutez
update.serviceaprès 2 heures écoulées.sudo systemd-run --on-active="2h" --unit update.service -
Créez
~/tmp/myfileaprès 1 heure.sudo systemd-run --on-active="1h" /bin/touch ~/tmp/myfile -
Exécutez
~/myscripts/update.sh5 minutes après le démarrage du gestionnaire de services. Utilisez cette syntaxe pour exécuter un service après le démarrage du gestionnaire de services lors de la connexion de l'utilisateur.sudo systemd-run --on-startup="5m" ~/myscripts/update.sh -
Exécutez
myjob.service10 minutes après le démarrage du système.sudo systemd-run --on-boot="10m" --unit myjob.service -
Exécutez
report.serviceà la fin de la journée.sudo systemd-run --on-calendar="17:00:00"