Comment planifier les tâches avec Systemd Timers dans Linux
- 4452
- 226
- Maxence Arnaud
La façon traditionnelle de planifier les tâches sur Linux est d'utiliser le démon cron, de spécifier les intervalles de temps et
commandes à exécuter en crontabs.
SystemD, le système d'initial relativement nouveau désormais adopté par toutes les principales distributions Linux, entre autres, offre la possibilité de planifier des tâches unités
, appelé chronomètre
. Dans cet article, nous apprendrons comment ils sont structurés et quelques exemples de leur utilisation.
Dans ce tutoriel, vous apprendrez:
- La structure de base des temporisateurs SystemD;
- Comment créer des minuteries monotones et en temps réel;
- Comment répertorier et inspecter les minuteries actives;
- Comment activer les minuteries;
- Comment utiliser les minuteries transitoires;
Exigences et conventions logicielles utilisées
Catégorie | Exigences, conventions ou version logicielle utilisée |
---|---|
Système | Indépendant de la distribution |
Logiciel | Systemd |
Autre | Connaissance des concepts Systemd de base |
Conventions | # - Exige que les commandes Linux soient exécutées avec des privilèges racine soit directement en tant qu'utilisateur racine, soit par l'utilisation de Sudo commande$ - Exige que les commandes Linux soient exécutées en tant qu'utilisateur non privilégié régulier |
Utilisation de base
La planification d'une tâche via SystemD implique l'utilisation de deux types d'unités différents: chronomètre
et prestations de service
. Les premiers sont des fichiers unitaires avec le .minuteur
Extension: en eux, nous définissons le calendrier d'emploi et définissons l'unité de service qui doit être déclenchée. Ces derniers sont les types d'unités les plus courants: ils sont utilisés pour définir des services sur les distributions Linux modernes et sont identifiés par le .service
extension.
Nous utilisons des unités de service pour définir la commande réelle à exécuter (si vous n'êtes pas familier avec les concepts SystemD de base, vous voudrez peut-être consulter notre article sur SystemD Services).
Selon la façon dont le calendrier est créé, une minuterie peut être:
- Monotone
- Temps réel
Minuteries monotones
SystemD fournit une liste de mots clés que nous pouvons utiliser dans une unité de minuterie pour planifier l'exécution d'une tâche un certain temps après qu'un événement prédéfini a eu lieu. Les mots clés doivent être utilisés dans le [Minuteur]
Section de la minuterie.
Voyons-les et expliquons leur signification:
Mot-clé | Signification |
---|---|
Onactivesec | Planifiez la tâche par rapport au moment où l'unité de minuterie elle-même est activée |
Onbootsec | Planifiez la tâche par rapport à l'heure de démarrage du système |
Onstartupsec | Planifiez la tâche par rapport au moment où Systemd a commencé |
OnUnitactivesec | Planifiez la tâche par rapport à la dernière fois que l'unité de service était active |
Onunitinactivesec | Planifiez la tâche par rapport à la dernière fois que l'unité de service était inactive |
Comme peuvent être facilement devinés à partir du nom des clés, les «secondes» sont utilisées comme unité de temps par défaut. Nous pouvons cependant spécifier une unité différente après la valeur (e.g. 15m - quinze minutes). Comme nous le verrons plus loin, les mots clés peuvent être combinés à l'intérieur d'une unité de minuterie.
Minuteries en temps réel
Un événement peut également être programmé en termes «absolus», de la même manière que la façon dont nous le définissons via cron, en utilisant un autre Oncalendar
mot-clé et encodages de temps autorisés.
Voici quelques exemples:
Spécifications de temps | Explication |
---|---|
Mer 18:00:00 | La tâche sera exécutée chaque mercredi à 18h00 |
Lun… mer * -5-27 | La tâche sera exécutée le 27 mai de chaque année, mais seulement les jours du lundi au mercredi |
2020-05-27 | La tâche sera exécutée le 27 mai de l'année 2020 à 00h00 |
Jeu, ven 2020 - * - 1,5 11:12:13 | La tâche sera exécutée à 11:12:13 du premier et du cinquième jour de chaque mois de l'année 2020, mais seulement si le jour est un jeudi ou un vendredi |
*: 0/2 | La tâche sera exécutée toutes les deux minutes à partir de la minute 0 |
15/2 | La tâche sera exécutée toutes les deux heures à partir de 15h00 |
de temps | La tâche sera exécutée au début de chaque heure |
quotidien | La tâche sera exécutée chaque jour à 00:00:00 |
hebdomadaire | La tâche sera exécutée tous les lundis à 00h00 |
mensuel | La tâche sera exécutée le premier jour de chaque mois à 00:00:00 |
Les jours de semaine, s'ils sont spécifiés, doivent être en anglais, soit dans l'abrégé (mer) ou le formulaire complet (mercredi) (l'affaire n'a pas d'importance).
Nous pouvons fournir une liste de valeurs de temps en utilisant le ,
caractère et spécifiez une gamme de valeurs en utilisant …
. UN *
Le caractère correspond à n'importe quelle valeur. Plus d'exemples peuvent être trouvés en consultant le systemd.temps
page d'homme.
Listing des minuteries actives
Pour répertorier tous les actifs unités de minuterie
Dans notre système, nous pouvons lancer le listes de liste
sous-commande de systemctl
. À moins que le --tous
L'option est transmise à la commande, seuls les minuteries actives sont incluses dans le résultat. Voici un exemple de la sortie produite par la commande:
$ SystemCTL List-Timers SUIVANT GAUCHE DERNIER PASSÉ UNITÉ Active Soleil 2020-01-19 19:36:06 CET 5h 15min à gauche samedi 2020-01-18 10:38:59 CET 1 jour il y a 3h Systemd-Tmpfiles-Clean.Timer SystemD-TmpFiles-Clean.Service lun 2020-01-20 00:00:00 CET 9H gauche Sun 2020-01-19 00:00:16 CET 14H Ago Man-db.Timer Man-db.Service lun 2020-01-20 00:00:00 CET 9H Left du soleil 2020-01-19 00:00:16 CET il y a 14h Shadow.ombre de minuterie.service
Le rapport est très détaillé. Il comprend 6 colonnes, qui décrivent, dans l'ordre:
- La prochaine fois que la minuterie fonctionnera (SUIVANT));
- Combien de fois avant la prochaine fois que la minuterie sera à nouveau en cours d'exécution (GAUCHE));
- La dernière fois que la minuterie a couru (DERNIER));
- Combien de fois s'est écoulé depuis la dernière fois que la minuterie a couru (PASSÉ));
- Le
tireur
dans lequel le calendrier est défini (UNITÉ)); - Le
unité de service
activé par la minuterie (Active).
Un exemple du monde réel
Examinons le homme-DB.minuteur
minuteur. Pour inspecter l'unité, nous pouvons utiliser SystemCTL et le chat
Sous-commande:
$ systemctl chat man-db.minuteur
Voici la définition de la minuterie:
[Unité] Description = Documentation quotidienne de régénération de l'homme-DB = homme: mandb (8) [temporisateur] oncalendar = quotidien accuracysec = 12h persistant = true [install] wantedBy = timers.cible
La première chose que nous pouvons remarquer est le [Unité]
Strophe, qui est commune à tous les types d'unités Systemd. Ici, il est utilisé pour fournir une description de l'unité: nous pouvons voir que la minuterie est utilisée pour effectuer une «régénération quotidienne de Man-DB».
La section qui nous intéresse le plus, cependant, est [Minuteur]
. Cette strophe est spécifique aux unités de minuterie: c'est là que le calendrier est défini. Le Oncalendar
Le mot-clé est utilisé pour définir un quotidien
calendrier en temps réel.
Nous pouvons également observer que deux autres mots clés sont utilisés: Accuracysec
et Persistant
. Le premier est utilisé pour établir un retard maximum dans lequel le service peut être lancé. Dans ce cas, la valeur est 12h
, Ainsi, la commande pourrait être retardée pour un maximum de 12 heures. La valeur par défaut pour Accuracysec
est 1 minute
; La meilleure précision est obtenue avec le 1NS
Notation (1 nanoseconde).
L'autre mot-clé, Persistant
, prend une valeur booléenne: si elle est définie sur true, la dernière fois que le service a été déclenché par la minuterie est enregistré sur le disque. Si, pour une raison quelconque, une course prévue est manquée, la prochaine fois que l'unité de minuterie sera activée, le service est lancé immédiatement, si dans le temps écoulé, il aurait été déclenché au moins une fois. Cela peut être utile, par exemple, pour exécuter les horaires manqués en raison d'un système alimenté, la prochaine fois que la machine est alimentée.
En examinant de plus près la définition de la minuterie, nous pouvons remarquer que le service à déclencher n'est pas explicitement mentionné: lorsque cela se produit, Systemd recherche une unité de service avec le même nom de la minuterie (donc dans ce cas homme-DB.service
). Pour référencer une unité de service explicitement, nous devons utiliser le Unité
mot-clé.
Activer une minuterie
L'activation d'une minuterie est assez simple. Tout ce que nous avons à faire est de le placer, avec le service, c'est devrait déclencher, à l'intérieur du / etc / systemd / système
annuaire. Avec tous les fichiers en place, nous exécutons:
$ sudo systemctl start .minuteur
Pour que une minuterie soit automatiquement activée au démarrage (ou lorsqu'une autre cible spécifique est atteinte), tout ce que nous avons à faire est de nous assurer qu'il a un [Installer]
strophe, où nous spécifions quand l'activation devrait se produire.
Dans l'exemple ci-dessus Recherché par
Le mot-clé est utilisé pour établir une dépendance inverse (faible) d'une unité cible spécifique (chronomètre.cible
- Une cible atteinte assez tôt dans le processus de démarrage) sur l'unité de minuterie que nous configurons: avant que cette cible ne soit atteinte, notre unité doit être activée.
Minuteries transitoires
Il est possible de planifier l'exécution des tâches «à la volée», sans créer manuellement la minuterie et les unités de service dédiées en utilisant systemd run
. La commande crée des unités temporaires (ils ne survivront pas à un redémarrage) à l'intérieur du / run / systemd / transitoire
répertoire si vous exécutez à l'échelle mondiale et à l'intérieur / run / user // systemd / transity
Répertoire s'il est lancé en tant qu'utilisateur spécifique (--utilisateur
option).
Voyons un exemple. Supposons que nous voulions que la date et l'heure soient enregistrés dans un fichier chaque minute. Nous courions:
$ systemd-run --User --on-Calendar '*: 0/1' / bin / sh -c "Date >> ~ / Log.TXT "Timer en cours d'exécution comme unité: Run-R81A4FEF38154401BBD8CDBD1E5C19D04.La minuterie exécutera le service en tant qu'unité: Run-R81A4FEF38154401BBD8CDBD1E5C19D04.service
Comme nous pouvons le voir sur la sortie de la commande, deux unités temporaires ont été créées, Run-R81A4FEF38154401BBD8CDBD1E5C19D04.minuteur
et Run-R81A4FEF38154401BBD8CDBD1E5C19D04.service
.
Si nous examinons le fichier journal, nous pouvons voir que la minuterie fonctionne correctement:
$ Cat ~ / Log.Txt lun 20 janvier 2020 11:20:54 AM CET lun 20 janvier 2020 11:21:54 AM CET lun 20 janvier 2020 11:22:54 AM CET lun 20 janvier 2020 11:23:54 AM CET MON 20 janvier 2020 11 : 24: 54 AM CET lun 20 janvier 2020 11:25:54 AM CET lun 20 janvier 2020 11:26:54 AM CET
Pour supprimer / désactiver un minuterie transitoire
, Tout ce que nous avons à faire est de l'arrêter. Dans ce cas, nous courions:
$ SystemCTL - User stop run-R81A4FEF38154401BBD8CDBD1E5C19D04.minuteur
Conclusions
Dans ce didacticiel, nous avons appris comment planifier les tâches système en utilisant Systemd Tirsers comme alternative aux cronjobs. Nous avons vu les structures de base derrière les minuteries, comment nous pouvons définir des horaires monotoniques et en temps réel via des mots clés dédiés, tels que Onbootsec
ou Oncalendar
, Comment énumérer et examiner les minuteries actives, comment les activer et les désactiver.
Enfin, nous avons vu comment utiliser minuteries transitoires
. Dans cet article, vous devriez trouver tout ce dont vous avez besoin pour commencer avec les minuteries. Pour des informations plus détaillées, vous pouvez cependant jeter un œil à la documentation officielle, soit en ligne, soit en consultant le systemd.minuteur
page d'homme.
Tutoriels Linux connexes:
- Choses à installer sur Ubuntu 20.04
- Une introduction à l'automatisation Linux, des outils et des techniques
- Choses à faire après l'installation d'Ubuntu 20.04 Focal Fossa Linux
- Comment créer un travail cron à Kubernetes
- Mint 20: Mieux que Ubuntu et Microsoft Windows?
- Choses à faire après l'installation d'Ubuntu 22.04 Jammy Jellyfish…
- Téléchargement Linux
- Comment exécuter les commandes périodiquement avec Anacron sur Linux
- Fichiers de configuration Linux: 30 premiers
- Ubuntu 20.04 astuces et choses que vous ne savez peut-être pas
- « E Impossible de localiser le package - Erreur d'installation du package APT
- Installer la bague, une alternative Foss VoIP Skype »