Comment planifier les tâches avec Systemd Timers dans Linux

Comment planifier les tâches avec Systemd Timers dans Linux

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

Exigences logicielles et conventions de ligne de commande Linux
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:

  1. Monotone
  2. 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:

  1. La prochaine fois que la minuterie fonctionnera (SUIVANT));
  2. Combien de fois avant la prochaine fois que la minuterie sera à nouveau en cours d'exécution (GAUCHE));
  3. La dernière fois que la minuterie a couru (DERNIER));
  4. Combien de fois s'est écoulé depuis la dernière fois que la minuterie a couru (PASSÉ));
  5. Le tireur dans lequel le calendrier est défini (UNITÉ));
  6. 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