Regroupement des services systemd

10

J'ai écrit environ une demi-douzaine de .servicefichiers pour les différentes parties qui composent le système sur lequel je travaille. Il est utile de pouvoir démarrer l'ensemble du système au coup par coup, mais j'aimerais également avoir une seule unité qui démarre l'ensemble du système en un seul appel systemctl.

Quelle est la meilleure façon de procéder?

Magnus
la source

Réponses:

10

Vous voulez une unité de type cible , avec toutes les unités de service répertoriées comme Wants=dépendances. Ensuite, vous le démarrez en utilisant systemctl start unitname.target. (Assurez-vous de ne pas l'utiliser systemctl isolateici; cela fermera tout sauf ce qui se trouve dans l'arbre de dépendance de vos services, ce que vous ne voulez probablement pas.)

Tom Hunt
la source
Alternativement, vous pouvez utiliser la WantedByclé dans la [Install]section et noter une cible déjà existante. Par exemple, si vous souhaitez que vos services démarrent toujours avant que d'autres utilisateurs puissent se connecter, utilisez multi-user.target.
saiarcot895
Oui, le type cible avec la Wants=liste de tous les services semble suffisant pour démarrer , mais je n'arrive pas à trouver de moyen de faire fonctionner l' arrêt et le redémarrage en utilisant un type cible. Y a-t-il un type qui permet cela?
Magnus
Magnus, avez-vous déjà trouvé une bonne solution pour cela?
Sam Hendley
2
Sam, Magnus: Il semble que l'arrêt des services souhaités .targetpuisse être effectué à l'aide StopWhenUnneeded=yesde chacun des .servicefichiers. superuser.com/questions/470153/…
jonnor
1
Dans mon cas particulier, je peux utiliser les outils systemd pour gérer le globbing :) Donc, pour commencer j'utilise a .targetet pour arrêter j'utilise systemctl stop foo.\*(puisque tous les services impliqués ont des fichiers de service commençant par wit foo.).
Magnus
2

Avez-vous essayé d'utiliser PartOfsur les sous-unités du groupe cible en plus de Wantsla cible? Ex: PartOf=foo.targeten foo-sub1.serviceet Wants=foo-sub1.service foo-sub2.serviceen foo.target. J'ai juste essayé ceci et j'ai pu démarrer et arrêter toutes mes sous-unités simplement en démarrant et en arrêtant la cible.

PartOf =

Configure les dépendances similaires à Requiert =, mais limitées à l'arrêt et au redémarrage des unités. Lorsque systemd arrête ou redémarre les unités répertoriées ici, l'action est propagée à cette unité. Notez qu'il s'agit d'une dépendance à sens unique - les modifications apportées à cette unité n'affectent pas les unités répertoriées.

Lorsque PartOf = b.service est utilisé sur a.service, cette dépendance s'affiche sous la forme ConsistsOf = a.service dans la liste des propriétés de b.service. ConsistsOf = la dépendance ne peut pas être spécifiée directement.

Benny Jobigan
la source
Bienvenue chez U&L! Si votre message ne fournit pas de réponse à la question, il doit être publié dans la section Commentaire sous la question.
Yurij Goncharuk
Cela fournit l'autre moitié de la réponse donnée par Tom Hunt - la possibilité d'arrêter un groupe entier de services.
Benny Jobigan