Utilisation de minuteries dans Systemd
Explique comment les unités de minuterie systemd planifient le travail et comment configurer des minuteries en temps réel, monotones et transitoires.
Les fichiers d'unité d'horloge sont un type de fichier systemd que l'utilitaire systemctl utilise pour planifier des tâches, comme l'utilitaire cron qui utilise crontab et d'autres travaux 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 d'horloge 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é d'horloge systemd. Par conséquent, lorsque ces packages sont installés avec Oracle Linux, les fichiers d'unité d'horloge sont automatiquement inclus. Vous pouvez afficher les fichiers d'horloge sur le système à l'aide de la commande suivante :
systemctl list-unit-files --type=timer
La liste des fichiers d'horloge peut varier en fonction de l'emplacement d'exécution d'Oracle Linux, par exemple dans une instance 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 valeurs suivantes :
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 de calendrier sont spécifiées dans la section [Timer].
Dans l'exemple de configuration, le service dnf-makecache.service est configuré pour s'exécuter automatiquement 10 minutes après l'initialisation du système. Le service passe ensuite en mode inactif pendant une heure, comme indiqué par le paramètre OnUnitInactiveSec. A la fin de l'heure, le service s'exécute à nouveau. Ce cycle se poursuit indéfiniment toutes les heures.
Le paramètre RandomizedDelaySec fournit une limite de valeur pour la durée de 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 au plus tard. Ce paramètre est utile pour empêcher un trop grand nombre de travaux qui démarrent en même temps selon un planning spécifié, ce qui risquerait sinon de surcharger les ressources.
OnCalendar est un autre paramètre utile pour la planification 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é d'horloge systemd pour la planification d'un travail, reportez-vous aux pages de manuel systemd.timer(5).
Pour un tutoriel sur l'utilisation de
systemd dans Oracle Linux, y compris sur la configuration des fichiers d'unité d'horloge systemd, reportez-vous à https://docs.oracle.com/en/learn/ol-systemd/.Utiliser des unités de minuterie pour contrôler l'exécution des unités de service
Explique comment les unités de minuterie remplacent les travaux cron et comment inspecter, activer et surveiller les services déclenchés par la 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 d'horloge au lieu de configurer le démon cron pour les événements temporels. Les unités de minuterie peuvent être plus complexes à 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 immédiatement une unité de minuterie, tapez :
sudo systemctl enable --now myscript.timer
Pour répertorier toutes les horloges existantes sur le système, pour voir quand elles ont été exécutées pour la dernière fois et quand elles sont configurées pour s'exécuter pour la prochaine fois, tapez :
systemctl list-timers
Pour plus d'informations sur les minuteries système, reportez-vous aux pages de manuel systemd.timer(5) et systemd.time(7).
Configuration d'une unité d'horloge en temps réel
Les horloges en temps réel s'activent sur un événement de calendrier, comme les événements d'un crontab. L'option OnCalendar indique quand l'horloge exécute un service.
-
Si nécessaire, créez un fichier
.servicequi définit le service à déclencher par l'unité de minuterie. 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, l'horloge est configurée pour exécuter le service toutes les 2 heures du lundi au vendredi.
Cette tâche explique comment créer une horloge 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 un travail cron.
Configuration d'une unité d'horloge monotone
Les horloge monotones s'activent après une période relative à 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 horloges monotones sont configurées à l'aide de l'option OnTypeSec, où Type est le nom de l'événement auquel l'horloge est associée. Les minuteries monotones courantes incluent OnBootSec et OnUnitActiveSec.
-
Si nécessaire, créez un fichier
.servicequi définit le service à déclencher par l'unité de minuterie. 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, l'horloge est configurée pour exécuter le service 10 minutes après l'initialisation du système et toutes les 2 heures après la dernière activation du service.
Cette tâche vous montre comment créer une horloge système pour déclencher l'exécution d'un service lors d'événements spécifiques, c'est-à-dire lorsque le système s'initialise ou après 2 heures d'expiration de l'activation de l'horloge.
Exécution d'une unité d'horloge transitoire
Explique comment lancer des horloges ponctuelles avec systemctl run afin de pouvoir planifier des tâches ad hoc sans créer de fichiers d'unité.
Les minuteries temporaires sont des minuteries temporaires qui ne sont valides que pour la session en cours.
Ces minuteries peuvent être créées pour exécuter un programme ou un script directement sans qu'il soit nécessaire de configurer des unités de service ou d'horloge dans systemd. Ces unités sont générées à l'aide de la commande systemd-run. Pour plus d'informations, reportez-vous à la page du 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é d'horloge non persistante.
Les exemples suivants montrent comment utiliser systemd-run pour activer les minuteries transitoires.
-
Exécutez
update.serviceaprès 2 heures écoulées.sudo systemd-run --on-active="2h" --unit update.service -
Créez
~/tmp/myfileau bout de 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 une fois que le gestionnaire de services a démarré lors de la connexion utilisateur.sudo systemd-run --on-startup="5m" ~/myscripts/update.sh -
Exécutez
myjob.service10 minutes après l'initialisation 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"