J'ai remarqué une variation significative de l'approche dans certaines documentations systemd et dans des documents pratiques concernant la façon de configurer un ou plusieurs services pour utiliser le même timer.
D'après ce que j'ai pu comprendre (mais je peux me tromper), ceci décrirait ce que l'on appelle la WantedBy y Unité Les paramètres d'un fichier de service et de temporisation doivent être définis (sans utiliser d'exemples de code réels ici - afin de réduire la longueur du post) pour un service unique et, inversement, pour une configuration de plusieurs services utilisant une seule temporisation :
Minuterie pour un seul service
My.Service1 'WantedBy' Param: N/A (1)
My.Timer 'Unit' Param: My.Service1 (2)
My.Timer 'WantedBy' Param: MultiUser/Basic.Target (3)
(1) Le fichier de service n'a pas besoin d'une section [Install] avec un paramètre WantedBy.
(2) Dans la section [Timer] de la minuterie, le paramètre Unit doit pointer vers le fichier de service My.Service1.
(3) Le fichier de temporisation possède un paramètre WantedBy qui pointe vers une cible système spéciale qui sera utilisée pour le démarrer.
Minuterie pour plusieurs services
My.Service1 'WantedBy' Param: Timer.Target (1)
My.Service2 'WantedBy' Param: Timer.Target (1)
My.Service3 'WantedBy' Param: Timer.Target (1)
Timer 'Unit' Param: Timer.Target (2)
Timer 'WantedBy' Param: ???
(1) Les services doivent tous se connecter à la même cible définie à l'aide du paramètre WantedBy.
(2) Le paramètre Unité [Timer] doit également pointer vers la cible.
Pour un exemple de cette dernière configuration, voir ce mode d'emploi . Je vais considérer cela comme l'exemple 1. Cependant, j'ai trouvé d'autres exemples de mode d'emploi qui s'en écartent (voir ci-dessous).
Exemple 2 y Exemple 3 disons qu'il devrait être configuré comme ceci :
My.Service1 WantedBy: Timer.Target
My.Service2 WantedBy: Timer.Target
My.Service3 WantedBy: Timer.Target
Timer 'Unit' Param: My.Service1 (1)
Timer 'WantedBy' Param: MultiUser/Basic.Target
(1) Il doit s'agir d'un oubli dans la documentation parce que si vous laissez l'unité pointer vers un seul de vos multiples services, les autres les autres services ne peuvent pas utiliser le timer. Il est possible que cela soit dû à l'approche "voir ci-dessus" utilisée ici pour renvoyer le lecteur à la configuration du service unique sans réellement mentionner (de manière importante) ce qui doit être modifié.
Ensuite, avec Exemple 4 sa configuration semble fonctionner, mais il s'agit de connecter les services à la cible d'une manière différente en créant les fichiers de service directement sous le nom de l'utilisateur. /etc/systemd/system/Timer.Target.wants/ et exclut tout paramètre WantedBy dans les fichiers de service. Ainsi :
My.Service1 'WantedBy' Param: N/A
My.Service2 'WantedBy' Param: N/A
My.Service3 'WantedBy' Param: N/A
Timer 'Unit' Param: Timer.Target
Timer 'WantedBy' Param: MultiUser/Basic.Target
Une approche hybride entre les exemples 1 et 4 que j'ai vue consiste à créer les fichiers de service dans le dossier de l'utilisateur. /etc/systemd/system/ (l'emplacement par défaut) et de créer un lien symbolique vers ces fichiers de service sous le répertoire /etc/systemd/system/Timer.Target.wants et exclure un paramètre WantedBy dans le fichier de service (ce qui est fonctionnellement équivalent à l'exemple 4), tandis qu'une autre configuration utilise la méthode du lien symbolique mais inclut en plus le paramètre WantedBy dans le fichier de service (ce qui semble redondant et inutile).
Ma question serait cependant la suivante pour les approches de l'exemple 4 et hybride : Pourquoi mettre quelque chose sous un *.veut n'est pas du tout nécessaire si la déclaration d'un paramètre WantedBy est censée demander à systemd de le faire pour vous (comme indiqué dans l'explication de ce paramètre à la page cette page ) ?
Quelqu'un peut-il nous éclairer sur la meilleure façon de configurer plusieurs services à l'aide d'une même minuterie parmi la multiplicité déroutante des approches pour y parvenir ?
0 votes
Laquelle vous convient le mieux ? J'ai créé ces services et ces timers dans /usr/lib/systemd et j'utilise
systemctl --user start mytimer.timer
...il crée des liens symboliques sous ~/.config/systemd/user