Ces minuteries, comme les tĂąches cron, peuvent, Ă un moment donnĂ©, dĂ©clencher diverses actions sur le systĂšme. Par exemple - exĂ©cuter des scripts ou des programmes shell. Les minuteries peuvent fonctionner, par exemple, une fois par jour et uniquement le lundi. Un autre exemple est une minuterie qui se dĂ©clenche toutes les 15 minutes pendant les heures de bureau (de 8 h Ă 18 h). Mais les minuteries systemd peuvent faire quelque chose que les tĂąches cron ne peuvent pas faire. Par exemple, un minuteur peut appeler un script ou un programme une heure spĂ©cifiĂ©e aprĂšs un Ă©vĂ©nement. Un tel Ă©vĂ©nement peut ĂȘtre le dĂ©marrage du systĂšme ou le dĂ©marrage de systemd, l'achĂšvement d'une tĂąche prĂ©cĂ©dente ou mĂȘme la fin d'un service prĂ©cĂ©demment appelĂ© par un minuteur.
Minuteries utilisées pour la maintenance du systÚme
Lorsque Fedora ou une autre distribution Linux basée sur systemd est installée sur un ordinateur, plusieurs minuteries sont créées dans le cadre des routines de maintenance du systÚme. Ces procédures sont automatiquement exécutées sur n'importe quel systÚme Linux. Les minuteries correspondantes déclenchent diverses tùches de service, telles que la mise à jour des bases de données systÚme, la suppression des répertoires temporaires, la rotation des fichiers journaux, etc.
A titre d'exemple, je vais donner ici des informations sur les minuteries disponibles sur la machine virtuelle que j'ai utilisée pour les expériences. Ici, pour obtenir une liste de tous les minuteurs, j'ai utilisé la commande
systemctl status *timer
... Le caractĂšre gĂ©nĂ©rique astĂ©risque joue ici le mĂȘme rĂŽle que dans d'autres commandes similaires. Ă savoir, cela indique au systĂšme que nous nous intĂ©ressons Ă tous les minuteries (unitĂ©s de minuterie, elles sont Ă©galement appelĂ©es "fichiers d'unitĂ© de minuterie" ou "unitĂ©s de minuterie") de systemd:
[root@testvm1 ~]# systemctl status *timer
â mlocate-updatedb.timer - Updates mlocate database every day
Loaded: loaded (/usr/lib/systemd/system/mlocate-updatedb.timer; enabled; vendor preset: enabled)
Active: active (waiting) since Tue 2020-06-02 08:02:33 EDT; 2 days ago
Trigger: Fri 2020-06-05 00:00:00 EDT; 15h left
Triggers: â mlocate-updatedb.service
Jun 02 08:02:33 testvm1.both.org systemd[1]: Started Updates mlocate database every day.
â logrotate.timer - Daily rotation of log files
Loaded: loaded (/usr/lib/systemd/system/logrotate.timer; enabled; vendor preset: enabled)
Active: active (waiting) since Tue 2020-06-02 08:02:33 EDT; 2 days ago
Trigger: Fri 2020-06-05 00:00:00 EDT; 15h left
Triggers: â logrotate.service
Docs: man:logrotate(8)
man:logrotate.conf(5)
Jun 02 08:02:33 testvm1.both.org systemd[1]: Started Daily rotation of log files.
â sysstat-summary.timer - Generate summary of yesterday's process accounting
Loaded: loaded (/usr/lib/systemd/system/sysstat-summary.timer; enabled; vendor preset: enabled)
Active: active (waiting) since Tue 2020-06-02 08:02:33 EDT; 2 days ago
Trigger: Fri 2020-06-05 00:07:00 EDT; 15h left
Triggers: â sysstat-summary.service
Jun 02 08:02:33 testvm1.both.org systemd[1]: Started Generate summary of yesterday's process accounting.
â fstrim.timer - Discard unused blocks once a week
Loaded: loaded (/usr/lib/systemd/system/fstrim.timer; enabled; vendor preset: enabled)
Active: active (waiting) since Tue 2020-06-02 08:02:33 EDT; 2 days ago
Trigger: Mon 2020-06-08 00:00:00 EDT; 3 days left
Triggers: â fstrim.service
Docs: man:fstrim
Jun 02 08:02:33 testvm1.both.org systemd[1]: Started Discard unused blocks once a week.
â sysstat-collect.timer - Run system activity accounting tool every 10 minutes
Loaded: loaded (/usr/lib/systemd/system/sysstat-collect.timer; enabled; vendor preset: enabled)
Active: active (waiting) since Tue 2020-06-02 08:02:33 EDT; 2 days ago
Trigger: Thu 2020-06-04 08:50:00 EDT; 41s left
Triggers: â sysstat-collect.service
Jun 02 08:02:33 testvm1.both.org systemd[1]: Started Run system activity accounting tool every 10 minutes.
â dnf-makecache.timer - dnf makecache --timer
Loaded: loaded (/usr/lib/systemd/system/dnf-makecache.timer; enabled; vendor preset: enabled)
Active: active (waiting) since Tue 2020-06-02 08:02:33 EDT; 2 days ago
Trigger: Thu 2020-06-04 08:51:00 EDT; 1min 41s left
Triggers: â dnf-makecache.service
Jun 02 08:02:33 testvm1.both.org systemd[1]: Started dnf makecache âtimer.
â systemd-tmpfiles-clean.timer - Daily Cleanup of Temporary Directories
Loaded: loaded (/usr/lib/systemd/system/systemd-tmpfiles-clean.timer; static; vendor preset: disabled)
Active: active (waiting) since Tue 2020-06-02 08:02:33 EDT; 2 days ago
Trigger: Fri 2020-06-05 08:19:00 EDT; 23h left
Triggers: â systemd-tmpfiles-clean.service
Docs: man:tmpfiles.d(5)
man:systemd-tmpfiles(8)
Jun 02 08:02:33 testvm1.both.org systemd[1]: Started Daily Cleanup of Temporary Directories.
Chaque timer est associé à au moins six lignes contenant des informations à son sujet:
- La premiĂšre ligne contient le nom du fichier du minuteur et une brĂšve description du but de l'existence du minuteur.
- La deuxiÚme ligne affiche des informations sur l'état de la minuterie. à savoir, il indique s'il est chargé, donne le chemin complet vers le fichier du minuteur, montre l'état du préréglage du fournisseur (désactivé ou activé).
- La troisiĂšme ligne affiche des informations sur l'activitĂ© de la minuterie, qui comprend des informations sur le moment oĂč la minuterie a Ă©tĂ© activĂ©e.
- La quatriÚme ligne contient la date et l'heure du prochain démarrage de la minuterie et le temps approximatif restant jusqu'à ce qu'il démarre.
- La cinquiÚme ligne donne le nom du service ou de l'événement appelé par le temporisateur.
- Certains fichiers d'unité de minuterie systemd (mais pas tous) contiennent des pointeurs vers la documentation. Ces pointeurs sont, dans mon exemple, dans les descriptions de trois minuteries.
- La derniÚre ligne de la description du temporisateur est l'entrée de journal associée à l'instance la plus récente du service appelé par le temporisateur.
Si vous essayez d'exécuter une commande sur votre ordinateur
systemctl status *timer
, le jeu de minuteries qui lui est présenté peut trÚs bien différer du mien.
Création de minuterie
Bien que nous puissions comprendre les spécificités du fonctionnement des minuteries en analysant les minuteries existantes, je suggÚre de créer votre propre fichier d'unité de service (fichier de configuration de service, unité de service ) et un fichier de minuterie avec lequel le service correspondant sera appelé. Nous sommes ici, pour ne pas compliquer l'histoire, donner un exemple assez trivial. Mais aprÚs l'avoir traité, il vous sera plus facile de comprendre le travail des autres chronométreurs.
Tout d'abord, créons un fichier de configuration de service simple qui exécutera quelque chose d'aussi simple qu'une commande
free
. Par exemple, cela peut ĂȘtre nĂ©cessaire si nous avons besoin de surveiller rĂ©guliĂšrement la quantitĂ© de mĂ©moire disponible. CrĂ©ons un fichier unitĂ© nommĂ© myMonitor.service
dans le dossier /etc/systemd/system
. Il n'est pas nécessaire qu'il soit exécutable.
# This service unit is for testing timer units
# By David Both
# Licensed under GPL V2
#
[Unit]
Description=Logs system statistics to the systemd journal
Wants=myMonitor.timer
[Service]
Type=oneshot
ExecStart=/usr/bin/free
[Install]
WantedBy=multi-user.target
Ce fichier est probablement le fichier de configuration de service le plus simple. Maintenant, vérifions son état et testons-le pour nous assurer qu'il fonctionne comme prévu.
[root@testvm1 system]# systemctl status myMonitor.service
â myMonitor.service - Logs system statistics to the systemd journal
Loaded: loaded (/etc/systemd/system/myMonitor.service; disabled; vendor preset: disabled)
Active: inactive (dead)
[root@testvm1 system]# systemctl start myMonitor.service
[root@testvm1 system]#
Pourquoi rien n'est sorti sur la console? Cela est dû au fait que, par défaut, la sortie standard (
stdout
) des programmes dĂ©marrĂ©s par systemd Ă l'aide de fichiers d'unitĂ© de service est redirigĂ©e vers le journal systemd. Pour cette raison, au moins tant que les enregistrements correspondants existent, ces enregistrements peuvent ĂȘtre analysĂ©s. Jetons un coup d'Ćil dans le journal et cherchons les entrĂ©es liĂ©es Ă notre service et au jour oĂč nous avons testĂ©. La commande correspondante ressemblera Ă ceci : journalctl -S today -u myMonitor.service
. La clé -S
est une version abrégée --since
. Il vous permet de spécifier la période pendant laquelle l'utilitairejournalctl
à la recherche de disques. Le fait n'est pas que nous ne sommes pas intéressés par les résultats antérieurs. Dans notre cas, de tels résultats ne seront tout simplement pas. Cette clé est utilisée pour réduire le temps dont l'utilitaire a besoin pour rechercher des données. Si l'ordinateur fonctionne depuis longtemps, de nombreuses entrées peuvent s'accumuler dans le journal.
[root@testvm1 system]# journalctl -S today -u myMonitor.service
-- Logs begin at Mon 2020-06-08 07:47:20 EDT, end at Thu 2020-06-11 09:40:47 EDT. --
Jun 11 09:12:09 testvm1.both.org systemd[1]: Starting Logs system statistics to the systemd journal...
Jun 11 09:12:09 testvm1.both.org free[377966]: total used free shared buff/cache available
Jun 11 09:12:09 testvm1.both.org free[377966]: Mem: 12635740 522868 11032860 8016 1080012 11821508
Jun 11 09:12:09 testvm1.both.org free[377966]: Swap: 8388604 0 8388604
Jun 11 09:12:09 testvm1.both.org systemd[1]: myMonitor.service: Succeeded.
[root@testvm1 system]#
Une tĂąche lancĂ©e Ă l'aide d'un fichier de configuration de service peut ĂȘtre reprĂ©sentĂ©e comme un programme unique, une sĂ©quence de programmes ou un script Ă©crit dans n'importe quel langage de script. Ajoutons
myMonitor.service
une autre tùche au fichier unité , y compris les [Service]
suivantes Ă la fin de la section :
ExecStart=/usr/bin/lsblk
Redémarrons le service et vérifions le journal. Il devrait y avoir quelque chose qui ressemble à ce qui est montré ci-dessous. à savoir, le journal doit contenir les données générées par les deux commandes:
Jun 11 15:42:18 testvm1.both.org systemd[1]: Starting Logs system statistics to the systemd journal...
Jun 11 15:42:18 testvm1.both.org free[379961]: total used free shared buff/cache available
Jun 11 15:42:18 testvm1.both.org free[379961]: Mem: 12635740 531788 11019540 8024 1084412 11812272
Jun 11 15:42:18 testvm1.both.org free[379961]: Swap: 8388604 0 8388604
Jun 11 15:42:18 testvm1.both.org lsblk[379962]: NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
Jun 11 15:42:18 testvm1.both.org lsblk[379962]: sda 8:0 0 120G 0 disk
Jun 11 15:42:18 testvm1.both.org lsblk[379962]: ââsda1 8:1 0 4G 0 part /boot
Jun 11 15:42:18 testvm1.both.org lsblk[379962]: ââsda2 8:2 0 116G 0 part
Jun 11 15:42:18 testvm1.both.org lsblk[379962]: ââVG01-root 253:0 0 5G 0 lvm /
Jun 11 15:42:18 testvm1.both.org lsblk[379962]: ââVG01-swap 253:1 0 8G 0 lvm [SWAP]
Jun 11 15:42:18 testvm1.both.org lsblk[379962]: ââVG01-usr 253:2 0 30G 0 lvm /usr
Jun 11 15:42:18 testvm1.both.org lsblk[379962]: ââVG01-tmp 253:3 0 10G 0 lvm /tmp
Jun 11 15:42:18 testvm1.both.org lsblk[379962]: ââVG01-var 253:4 0 20G 0 lvm /var
Jun 11 15:42:18 testvm1.both.org lsblk[379962]: ââVG01-home 253:5 0 10G 0 lvm /home
Jun 11 15:42:18 testvm1.both.org lsblk[379962]: sr0 11:0 1 1024M 0 rom
Jun 11 15:42:18 testvm1.both.org systemd[1]: myMonitor.service: Succeeded.
Jun 11 15:42:18 testvm1.both.org systemd[1]: Finished Logs system statistics to the systemd journal.
Maintenant, une fois que nous sommes sûrs que tout fonctionne correctement, nous allons créer, dans le dossier
/etc/systemd/system
, un fichier d'unité de minuterie, en lui donnant un nom myMonitor.timer
. Ajoutez ce qui suit au fichier:
# This timer unit is for testing
# By David Both
# Licensed under GPL V2
#
[Unit]
Description=Logs some system statistics to the systemd journal
Requires=myMonitor.service
[Timer]
Unit=myMonitor.service
OnCalendar=*-*-* *:*:00
[Install]
WantedBy=timers.target
L'horodatage
OnCalendar
dans ce fichier ,, *-*-* *:*:00
devrait amener le minuteur à appeler l'unité myMonitor.service
toutes les minutes. OnCalendar
Nous en parlerons plus en détail ci-dessous.
En attendant, nous pouvons jeter un Ćil aux entrĂ©es de journal liĂ©es au dĂ©marrage du service de minuterie. Nous pouvons Ă©galement activer le mode montre minuterie. Cependant, la surveillance du service vous permettra de voir les rĂ©sultats en temps quasi rĂ©el. Pour ce faire, vous devez exĂ©cuter
journalctl
avec la touche -f
( follow
):
[root@testvm1 system]# journalctl -S today -f -u myMonitor.service
-- Logs begin at Mon 2020-06-08 07:47:20 EDT. --
Démarrez le minuteur, mais ne l'incluez pas dans le démarrage automatique au démarrage du systÚme.
[root@testvm1 ~]# systemctl start myMonitor.timer
[root@testvm1 ~]#
Regardez ce qui se passe pendant un moment.
L'un des résultats apparaßt immédiatement. Et les suivants seront affichés à des intervalles d'environ une minute. Regardez le magazine pendant quelques minutes.
[root@testvm1 system]# journalctl -S today -f -u myMonitor.service
-- Logs begin at Mon 2020-06-08 07:47:20 EDT. --
Jun 13 08:39:18 testvm1.both.org systemd[1]: Starting Logs system statistics to the systemd journal...
Jun 13 08:39:18 testvm1.both.org systemd[1]: myMonitor.service: Succeeded.
Jun 13 08:39:19 testvm1.both.org free[630566]: total used free shared buff/cache available
Jun 13 08:39:19 testvm1.both.org free[630566]: Mem: 12635740 556604 10965516 8036 1113620 11785628
Jun 13 08:39:19 testvm1.both.org free[630566]: Swap: 8388604 0 8388604
Jun 13 08:39:18 testvm1.both.org systemd[1]: Finished Logs system statistics to the systemd journal.
Jun 13 08:39:19 testvm1.both.org lsblk[630567]: NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
Jun 13 08:39:19 testvm1.both.org lsblk[630567]: sda 8:0 0 120G 0 disk
Jun 13 08:39:19 testvm1.both.org lsblk[630567]: ââsda1 8:1 0 4G 0 part /boot
Jun 13 08:39:19 testvm1.both.org lsblk[630567]: ââsda2 8:2 0 116G 0 part
Jun 13 08:39:19 testvm1.both.org lsblk[630567]: ââVG01-root 253:0 0 5G 0 lvm /
Jun 13 08:39:19 testvm1.both.org lsblk[630567]: ââVG01-swap 253:1 0 8G 0 lvm [SWAP]
Jun 13 08:39:19 testvm1.both.org lsblk[630567]: ââVG01-usr 253:2 0 30G 0 lvm /usr
Jun 13 08:39:19 testvm1.both.org lsblk[630567]: ââVG01-tmp 253:3 0 10G 0 lvm /tmp
Jun 13 08:39:19 testvm1.both.org lsblk[630567]: ââVG01-var 253:4 0 20G 0 lvm /var
Jun 13 08:39:19 testvm1.both.org lsblk[630567]: ââVG01-home 253:5 0 10G 0 lvm /home
Jun 13 08:39:19 testvm1.both.org lsblk[630567]: sr0 11:0 1 1024M 0 rom
Jun 13 08:40:46 testvm1.both.org systemd[1]: Starting Logs system statistics to the systemd journal...
Jun 13 08:40:46 testvm1.both.org free[630572]: total used free shared buff/cache available
Jun 13 08:40:46 testvm1.both.org free[630572]: Mem: 12635740 555228 10966836 8036 1113676 11786996
Jun 13 08:40:46 testvm1.both.org free[630572]: Swap: 8388604 0 8388604
Jun 13 08:40:46 testvm1.both.org lsblk[630574]: NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
Jun 13 08:40:46 testvm1.both.org lsblk[630574]: sda 8:0 0 120G 0 disk
Jun 13 08:40:46 testvm1.both.org lsblk[630574]: ââsda1 8:1 0 4G 0 part /boot
Jun 13 08:40:46 testvm1.both.org lsblk[630574]: ââsda2 8:2 0 116G 0 part
Jun 13 08:40:46 testvm1.both.org lsblk[630574]: ââVG01-root 253:0 0 5G 0 lvm /
Jun 13 08:40:46 testvm1.both.org lsblk[630574]: ââVG01-swap 253:1 0 8G 0 lvm [SWAP]
Jun 13 08:40:46 testvm1.both.org lsblk[630574]: ââVG01-usr 253:2 0 30G 0 lvm /usr
Jun 13 08:40:46 testvm1.both.org lsblk[630574]: ââVG01-tmp 253:3 0 10G 0 lvm /tmp
Jun 13 08:40:46 testvm1.both.org lsblk[630574]: ââVG01-var 253:4 0 20G 0 lvm /var
Jun 13 08:40:46 testvm1.both.org lsblk[630574]: ââVG01-home 253:5 0 10G 0 lvm /home
Jun 13 08:40:46 testvm1.both.org lsblk[630574]: sr0 11:0 1 1024M 0 rom
Jun 13 08:40:46 testvm1.both.org systemd[1]: myMonitor.service: Succeeded.
Jun 13 08:40:46 testvm1.both.org systemd[1]: Finished Logs system statistics to the systemd journal.
Jun 13 08:41:46 testvm1.both.org systemd[1]: Starting Logs system statistics to the systemd journal...
Jun 13 08:41:46 testvm1.both.org free[630580]: total used free shared buff/cache available
Jun 13 08:41:46 testvm1.both.org free[630580]: Mem: 12635740 553488 10968564 8036 1113688 11788744
Jun 13 08:41:46 testvm1.both.org free[630580]: Swap: 8388604 0 8388604
Jun 13 08:41:47 testvm1.both.org lsblk[630581]: NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
Jun 13 08:41:47 testvm1.both.org lsblk[630581]: sda 8:0 0 120G 0 disk
Jun 13 08:41:47 testvm1.both.org lsblk[630581]: ââsda1 8:1 0 4G 0 part /boot
Jun 13 08:41:47 testvm1.both.org lsblk[630581]: ââsda2 8:2 0 116G 0 part
Jun 13 08:41:47 testvm1.both.org lsblk[630581]: ââVG01-root 253:0 0 5G 0 lvm /
Jun 13 08:41:47 testvm1.both.org lsblk[630581]: ââVG01-swap 253:1 0 8G 0 lvm [SWAP]
Jun 13 08:41:47 testvm1.both.org lsblk[630581]: ââVG01-usr 253:2 0 30G 0 lvm /usr
Jun 13 08:41:47 testvm1.both.org lsblk[630581]: ââVG01-tmp 253:3 0 10G 0 lvm /tmp
Jun 13 08:41:47 testvm1.both.org lsblk[630581]: ââVG01-var 253:4 0 20G 0 lvm /var
Jun 13 08:41:47 testvm1.both.org lsblk[630581]: ââVG01-home 253:5 0 10G 0 lvm /home
Jun 13 08:41:47 testvm1.both.org lsblk[630581]: sr0 11:0 1 1024M 0 rom
Jun 13 08:41:47 testvm1.both.org systemd[1]: myMonitor.service: Succeeded.
Jun 13 08:41:47 testvm1.both.org systemd[1]: Finished Logs system statistics to the systemd journal.
Assurez-vous de vérifier à la fois l'état de la minuterie et l'état du service.
Avez-vous rĂ©ussi Ă remarquer ici ce que j'ai remarquĂ©? Vous avez peut-ĂȘtre remarquĂ© au moins deux choses en lisant le magazine.
PremiÚrement - le fait que vous n'avez pas besoin de faire quelque chose de spécial pour vous connecter à celui
ExecStart
d' myMonitor.service
Ă©crire stdout
. Cette fonction fait partie des fonctions de démarrage standard de systemd. Mais cela signifie que vous devrez probablement faire attention lors de l'exécution de scripts à partir de fichiers de configuration de service, en notant la quantité de données dans laquelle ils écrivent stdout
.
DeuxiĂšmement, vous avez peut-ĂȘtre remarquĂ© que la minuterie ne dĂ©marre pas exactement Ă
:00
secondes de chaque minute, et mĂȘme pas exactement une minute aprĂšs la derniĂšre exĂ©cution. C'est l'une des caractĂ©ristiques de ces minuteries, si cela est nĂ©cessaire (ou si cela blesse les sentiments de l'administrateur systĂšme), ce comportement des minuteries peut ĂȘtre modifiĂ© en les rendant plus prĂ©cis.
La raison pour laquelle la minuterie ne démarre pas en
:00
secondes de chaque minute est que le systĂšme a donc tendance Ă empĂȘcher plusieurs services de dĂ©marrer simultanĂ©ment. Par exemple, lors de la configuration de l'indicateur de temps, OnCalendar
vous pouvez utiliser des valeurs telles que Weekly
, Daily
et autres. Ces méthodes abrégées de dénomination des points dans le temps sont configurées de sorte que les minuteries dans lesquelles elles sont utilisées commencent à 00:00:00
le jour correspondant. Lorsque plusieurs minuteries sont configurĂ©es de cette façon, il y a de fortes chances qu'elles se dĂ©clenchent toutes en mĂȘme temps.
C'est pourquoi les minuteries systemd sont dĂ©libĂ©rĂ©ment conçues de maniĂšre Ă ne pas dĂ©marrer exactement Ă l'heure spĂ©cifiĂ©e, mais avec un Ă©cart alĂ©atoire par rapport Ă celle-ci. Cette dĂ©viation ne peut pas ĂȘtre qualifiĂ©e de complĂštement accidentelle. Les minuteries commencent quelque part dans une fenĂȘtre de temps qui commence au moment spĂ©cifiĂ© et se termine Ă une minute de l'original. Cette heure, conformĂ©ment Ă la documentation de
systemd.timer
, est maintenue dans un état stable, en tenant compte de tous les autres temporisateurs déclarés dans le systÚme. Dans le fragment de journal ci-dessus, vous pouvez voir que le minuteur est déclenché immédiatement aprÚs son démarrage, puis - environ 46 ou 47 secondes aprÚs le début de chaque minute suivante.
Le plus souvent, une telle approche probabiliste pour déterminer le moment exact des minuteries convient à tout le monde. Lors de la planification de tùches telles que la création d'une copie de sauvegarde de quelque chose tant que ces tùches sont effectuées en dehors des heures de bureau, cela ne pose aucun problÚme. L'administrateur systÚme, qui configure les tùches cron, peut spécifier des heures clairement définies pour les démarrer, par exemple
01:05:00
essayer de s'assurer que ces tùches n'entrent pas en conflit avec d'autres. Il existe un large éventail de façons de spécifier le temps qui le permet. Les changements aléatoires de l'heure de début d'une tùche qui ne dépassent pas une minute ne jouent généralement pas un rÎle particulier.
Mais pour certaines tĂąches, le moment exact du chronomĂštre est extrĂȘmement important. Dans de tels cas, lors du rĂ©glage des minuteries, vous pouvez spĂ©cifier une heure plus prĂ©cise de leur fonctionnement (jusqu'Ă la prĂ©cision, mesurĂ©e en microsecondes). Cela se fait en ajoutant au fichier de description du minuteur, dans la section
Timer
, une construction qui ressemble Ă ce qui suit:
AccuracySec=1us
Vous pouvez utiliser des mots clĂ©s spĂ©ciaux pour spĂ©cifier la prĂ©cision souhaitĂ©e du minuteur. Ces mots clĂ©s peuvent Ă©galement ĂȘtre utilisĂ©s lors de la configuration d'Ă©vĂ©nements rĂ©currents et ponctuels. Le systĂšme comprend les mots-clĂ©s suivants:
- Microseconde:
usec
,us
,”s
. - Milliseconde:
msec
,ms
. - DeuxiĂšmement:
seconds
,second
,sec
,s
. - Minute:
minutes
,minute
,min
,m
. - Heure:
hours
,hour
,hr
,h
. - Jour:
days
,day
,d
. - Semaine:
weeks
,week
,w
. - Mois:
months
,month
,M
(le mois est défini comme 30,44 jours). - Année:
years
,year
,y
(l'année est définie comme 365,25 jours).
Tous les minuteries standard disponibles dans
/usr/lib/systemd/system
sont configurĂ©es en utilisant des plages beaucoup plus longues qui dĂ©finissent la prĂ©cision de leur dĂ©clenchement, car dans le cas de ces minuteries, leur dĂ©clenchement Ă une heure strictement spĂ©cifiĂ©e n'est pas particuliĂšrement importante. Jetez un Ćil aux spĂ©cifications de certains des minuteries gĂ©nĂ©rĂ©es par le systĂšme:
[root@testvm1 system]# grep Accur /usr/lib/systemd/system/*timer
/usr/lib/systemd/system/fstrim.timer:AccuracySec=1h
/usr/lib/systemd/system/logrotate.timer:AccuracySec=1h
/usr/lib/systemd/system/logwatch.timer:AccuracySec=12h
/usr/lib/systemd/system/mlocate-updatedb.timer:AccuracySec=24h
/usr/lib/systemd/system/raid-check.timer:AccuracySec=24h
/usr/lib/systemd/system/unbound-anchor.timer:AccuracySec=24h
[root@testvm1 system]#
Pour mieux comprendre la structure interne des fichiers de minuterie à partir du répertoire
/usr/lib/systemd/system
, vous pouvez afficher leur contenu.
Vous n'avez pas besoin de configurer notre minuterie d'apprentissage pour qu'elle s'active au démarrage de votre systÚme. Cependant, si vous le souhaitez, vous pouvez utiliser la commande suivante pour cela:
[root@testvm1 system]# systemctl enable myMonitor.timer
Les fichiers de minuterie que vous allez crĂ©er n'ont pas besoin d'ĂȘtre exĂ©cutables. De plus, les fichiers de configuration de service n'ont pas besoin d'ĂȘtre configurĂ©s pour ĂȘtre activĂ©s au dĂ©marrage, car ils sont appelĂ©s par des minuteries. Si nĂ©cessaire, le service peut Ă©galement ĂȘtre appelĂ© manuellement Ă partir de la ligne de commande. Essayez ceci et regardez dans le journal systemd.
Pour en savoir plus sur la précision des minuteries, comment spécifier l'heure de déclenchement des événements et comment déclencher des événements, consultez la documentation de
systemd.timer
et systemd.time
.
Types de minuterie
Les minuteries Systemd ont d'autres fonctionnalitĂ©s que les tĂąches cron n'ont pas, «ponctuelles» ou rĂ©pĂ©titives, qui ne sont appelĂ©es qu'avec des dates en temps rĂ©el et en temps rĂ©el. Les minuteries Systemd peuvent ĂȘtre configurĂ©es pour ĂȘtre appelĂ©es en fonction des changements d'Ă©tat d'autres unitĂ©s systemd. Par exemple, le minuteur peut ĂȘtre configurĂ© de sorte qu'il soit dĂ©clenchĂ© aprĂšs un temps spĂ©cifiĂ© aprĂšs le dĂ©marrage du systĂšme, aprĂšs que l'utilisateur s'y soit connectĂ©, ou aprĂšs un temps spĂ©cifiĂ© aprĂšs l'activation d'un certain service. Ces minuteries sont appelĂ©es monotones. Ces minuteries sont rĂ©initialisĂ©es aprĂšs chaque redĂ©marrage du systĂšme.
Le tableau suivant présente une liste de minuteries monotones avec une brÚve description de chacun d'eux. Il existe également une description de la minuterie.
OnCalendar
, qui n'est pas monotone et est utilisĂ© dans les cas oĂč vous devez organiser un lancement unique ou rĂ©pĂ©tĂ© de quelque chose dans le futur. Ce tableau est basĂ© sur la documentation systemd.timer
.
Minuteur | Monotone | La description |
|
X | Le temps de fonctionnement de la minuterie est réglé par rapport au moment de l'activation de la minuterie. |
|
X | Le minuteur est rĂ©glĂ© en fonction du moment oĂč le systĂšme dĂ©marre. |
|
X | . OnBootSec= , . , , , , , . |
|
X | , , , . |
|
X | , , , . |
|
. systemd.time(7) . OnActiveSec= . â systemd, , cron. |
Lors de la configuration de minuteries monotones, les mĂȘmes mots-clĂ©s peuvent ĂȘtre utilisĂ©s comme dĂ©crit ci-dessus en parlant de
AccuracySec
. Mais il convient de noter que systemd convertit les intervalles de temps correspondants en secondes. Par exemple, vous pouvez définir une minuterie qui se déclenche une fois, cinq jours aprÚs le démarrage du systÚme. Il peut ressembler à une description comme ceci: OnBootSec=5d
. Si l'ordinateur a été démarré 2020-06-15
Ă 09:45:27
, le minuteur démarre 2020-06-20
Ă 09:45:27
(ou dans la minute qui suit ce moment).
Description des événements du calendrier
L'application d'événements de calendrier est un élément clé de la description des minuteries appelées à intervalles réguliers. Analysons certaines des caractéristiques de ces événements utilisées lors du réglage de l'indicateur de temps
OnCalendar
.
Systemd et ses minuteries correspondantes utilisent un format d'heure et de date différent de celui de crontab. Ce format est plus flexible que celui utilisé dans crontab. Il vous permet de spécifier la date et l'heure de maniÚre simplifiée, dans le style de commande
at
. Pour ceux qui le connaissent at
, il devrait ĂȘtre facile de comprendre les paramĂštres de la minuterie systemd.
Lorsqu'il est utilisé
OnCalendar=
pour configurer des minuteries, le format de base suivant est utilisé pour spécifier la date et l'heure:
DOW YYYY-MM-DD HH:MM:SS
DOW
(Day Of Week), il s'agit d'une partie facultative de la construction ci-dessus. Dans d'autres champs, vous pouvez utiliser le symbole astérisque ( *
) pour reprĂ©senter toute valeur qui peut apparaĂźtre dans la position qu'elle occupe. Toutes les formes d'indication de la date et de l'heure sont converties en forme normalisĂ©e. Si aucune heure n'est spĂ©cifiĂ©e, elle est supposĂ©e ĂȘtre 00:00:00
. Si la date n'est pas spĂ©cifiĂ©e, mais que l'heure est spĂ©cifiĂ©e, le minuteur fonctionnera soit le jour de son dĂ©marrage (relativement parlant, «aujourd'hui»), soit le jour suivant («demain»). Cela dĂ©pend de l'heure actuelle. Les mois et les jours de la semaine peuvent ĂȘtre nommĂ©s en utilisant leurs noms. Vous pouvez utiliser ici des listes de valeurs sĂ©parĂ©es par des virgules. Les plages de valeurs peuvent ĂȘtre sĂ©parĂ©es par trois points ( âŠ
), qui apparaissent entre la valeur de début et de fin de la plage.
Lors de la spĂ©cification des dates, nous avons quelques options intĂ©ressantes Ă notre disposition. Ainsi, un tilde (~) peut ĂȘtre utilisĂ© pour indiquer le dernier jour d'un mois, ou pour indiquer une date un nombre donnĂ© de jours avant le dernier jour du mois. La barre oblique (/) peut ĂȘtre utilisĂ©e comme modificateur pour indiquer le jour de la semaine.
Le tableau suivant montre quelques exemples typiques de minutage utilisé dans une expression
OnCalendar
.
Exemple de présentation d'un événement du calendrier DOW YYYY-MM-DD HH:MM:SS
|
La description |
|
Tous les jours de chaque mois de chaque année, 15 minutes 30 secondes aprÚs minuit. |
|
Tous les lundis Ă 00:00:00 . |
|
Le mĂȘme que Weekly . |
|
Le mĂȘme que Weekly . |
|
Tous les mercredis 2020 Ă 00:00:00 . |
|
Tous les jours de la semaine en 2021 Ă 00:00:00 . |
|
1er et 15 juin, juillet et août 2022 01:15:00 aprÚs minuit. |
|
, , , 3 . |
|
, 4 , . |
|
3 , , â , . . , ~ . |
|
, â . . , (- ). |
,
Systemd a un excellent outil pour vérifier et examiner les spécifications des événements du calendrier. Il s'agit d'une équipe
systemd-analyze calendar
qui analyse les descriptions des événements du calendrier et les présente sous une forme normalisée. Cette commande fournit également d'autres informations intéressantes, telles que la date et l'heure du prochain événement de ce type, et le temps approximatif restant jusqu'à ce moment.
Tout d'abord, regardons la spécification, qui contient uniquement la date, ne contient pas d'informations sur l'heure (notez que les heures dans les champs
Next elapse
et (in UTC)
sont différentes, cette différence dépend du fuseau horaire local):
[student@studentvm1 ~]$ systemd-analyze calendar 2030-06-17
Original form: 2030-06-17
Normalized form: 2030-06-17 00:00:00
Next elapse: Mon 2030-06-17 00:00:00 EDT
(in UTC): Mon 2030-06-17 04:00:00 UTC
From now: 10 years 0 months left
[root@testvm1 system]#
Ajoutons maintenant des informations de temps à la description. Dans cet exemple, la date et l'heure sont analysées séparément, en tant qu'entités qui ne sont pas liées les unes aux autres:
[root@testvm1 system]# systemd-analyze calendar 2030-06-17 15:21:16
Original form: 2030-06-17
Normalized form: 2030-06-17 00:00:00
Next elapse: Mon 2030-06-17 00:00:00 EDT
(in UTC): Mon 2030-06-17 04:00:00 UTC
From now: 10 years 0 months left
Original form: 15:21:16
Normalized form: *-*-* 15:21:16
Next elapse: Mon 2020-06-15 15:21:16 EDT
(in UTC): Mon 2020-06-15 19:21:16 UTC
From now: 3h 55min left
[root@testvm1 system]#
Prenons maintenant un exemple oĂč la date et l'heure sont considĂ©rĂ©es ensemble. Pour ce faire, ils doivent ĂȘtre placĂ©s entre guillemets. Mais si vous utilisez une telle construction dans
OnCalendar
, n'oubliez pas de supprimer les guillemets, sinon vous rencontrerez des erreurs:
[root@testvm1 system]# systemd-analyze calendar "2030-06-17 15:21:16"
Normalized form: 2030-06-17 15:21:16
Next elapse: Mon 2030-06-17 15:21:16 EDT
(in UTC): Mon 2030-06-17 19:21:16 UTC
From now: 10 years 0 months left
[root@testvm1 system]#
Maintenant, vérifions quelque chose du tableau précédent. J'aime particuliÚrement cette description d'elle:
2022-6,7,8-1,15 01:15:00
Analysons-le:
[root@testvm1 system]# systemd-analyze calendar "2022-6,7,8-1,15 01:15:00"
Original form: 2022-6,7,8-1,15 01:15:00
Normalized form: 2022-06,07,08-01,15 01:15:00
Next elapse: Wed 2022-06-01 01:15:00 EDT
(in UTC): Wed 2022-06-01 05:15:00 UTC
From now: 1 years 11 months left
[root@testvm1 system]#
Jetons maintenant un Ćil Ă la description
Mon *-05~3
, mais cette fois, nous demanderons au programme des informations sur les 5 prochaines fois de la minuterie, qui utilise les paramĂštres suivants:
[root@testvm1 ~]# systemd-analyze calendar --iterations=5 "Mon *-05~3"
Original form: Mon *-05~3
Normalized form: Mon *-05~03 00:00:00
Next elapse: Mon 2023-05-29 00:00:00 EDT
(in UTC): Mon 2023-05-29 04:00:00 UTC
From now: 2 years 11 months left
Iter. #2: Mon 2028-05-29 00:00:00 EDT
(in UTC): Mon 2028-05-29 04:00:00 UTC
From now: 7 years 11 months left
Iter. #3: Mon 2034-05-29 00:00:00 EDT
(in UTC): Mon 2034-05-29 04:00:00 UTC
From now: 13 years 11 months left
Iter. #4: Mon 2045-05-29 00:00:00 EDT
(in UTC): Mon 2045-05-29 04:00:00 UTC
From now: 24 years 11 months left
Iter. #5: Mon 2051-05-29 00:00:00 EDT
(in UTC): Mon 2051-05-29 04:00:00 UTC
From now: 30 years 11 months left
[root@testvm1 ~]#
Je pense que nous avons couvert suffisamment de cas d'utilisation
systemd-analyze calendar
pour vous permettre de tester vos propres descriptions d'événements de calendrier. Gardez à l'esprit que l'outil systemd-analyze
a d'autres fonctionnalités intéressantes.
Matériaux additionnels
Il existe de nombreuses publications sur systemd sur Internet, mais elles sont pour la plupart trop courtes, trÚs simplistes, voire boguées. Cet article fournit de bonnes sources d'informations sur systemd. Vous trouverez ci-dessous une liste de liens vers d'autres documents de qualité sur ce sujet.
- Un guide pratique de systemd par le projet Fedora.
- Une feuille de triche du projet Fedora qui mappe les commandes SystemV et systemd héritées.
- Détails sur systemd et pourquoi il a été créé.
- Matériel avec informations et conseils, dédié à systemd.
- (Lennart Poettering), systemd. , 2010 2011, . systemd .
- systemd.
- systemd.
Les minuteries Systemd peuvent ĂȘtre utilisĂ©es pour accomplir les mĂȘmes tĂąches que les tĂąches cron. Mais systemd vous offre plus de flexibilitĂ© en termes de configuration du calendrier et des minuteries monotones.
MĂȘme si les fichiers de configuration de service que nous crĂ©ons lors de nos expĂ©riences sont gĂ©nĂ©ralement appelĂ©s Ă l'aide de minuteries, vous pouvez les appeler Ă tout moment en utilisant une commande comme
systemctl start myMonitor.service
. Une minuterie peut dĂ©marrer plusieurs tĂąches. Cela peut ĂȘtre, par exemple, des scripts Bash et des utilitaires Linux. Un fichier de configuration de service peut ĂȘtre composĂ© de sorte que lorsqu'il est appelĂ©, plusieurs scripts sont exĂ©cutĂ©s. Vous pouvez Ă©galement exĂ©cuter les scripts sĂ©parĂ©ment.
Si nous parlons de la coexistence de systemd, cron et at, alors je tiens Ă noter que je n'ai encore vu aucun signe que cron ou at serait obsolĂšte. J'espĂšre qu'ils continueront Ă ĂȘtre pris en charge, car at est au moins beaucoup plus facile que systemd Ă utiliser pour planifier des tĂąches ponctuelles.
Qu'est-ce que vous utilisez? Minuteries Systemd ou tĂąches cron?