Ich frage mich, wie ich alle Einheiten stoppen kann, die durch dasselbe Ziel gruppiert sind.
Mein Setup ist wie folgt. Ich habe mehrere Gerätekonfigurationsdateien, die lauten:
[Unit]
...
[Service]
...
[Install]
WantedBy=mycustom.target
Wenn ich renne
# systemctl start mycustom.target
Die Einheiten, die "gesucht werden", mycustom.target
starten korrekt. Jetzt möchte ich auch alle Einheiten stoppen können, die von gewünscht werden mycustom.target
. Ich habe es versucht:
# systemctl stop mycustom.target
Dies macht jedoch nichts. Gibt es eine Möglichkeit, dies zum Laufen zu bringen, ohne alle Einheiten stoppen zu müssen, die (explizit) von demselben Ziel gewünscht werden?
StopWhenUnneeded
oder ist es impliziert?StopWhenUnneeded
dies bei der Verwendung nicht erforderlich istPartOf
. @PSSGCSimBearbeiten: Die
PartOf=
Richtlinie, die zum Zeitpunkt des Schreibens dieser Antwort noch nicht existierte, ist eine bessere Lösung. Siehe eine andere Antwort für Details.Es gibt zwei Möglichkeiten: eine implizite und eine explizite.
Erster Weg -
StopWhenUnneeded=
Der erste Weg ist die Verwendung der
StopWhenUnneeded=
Richtlinie. Wenn eine Einheit hatStopWhenUnneeded=yes
, wird es automatisch gestoppt , wenn es keine aktive Einheit wird dieWants=
/Requires=
das Gerät in Frage. Daher:WantedBy=
nur von sindmycustom.target
;systemctl start myunit.service
starten (dh sie werden gestartet und sofort danach gestoppt).Zweiter Weg - eine Shell-Pipeline
Die zweite Möglichkeit besteht darin, eine einfache Shell-Pipeline
systemctl show -p
zu erstellen , mit der die Abhängigkeitsliste von extrahiert wirdmycustom.target
.Insbesondere
systemctl show UNIT
werden alle Eigenschaften einer Einheit in einer KEY = VALUE-Formsystemctl show -p PROPERTIES UNIT
angezeigt und das Gleiche getan, wodurch die Menge der angezeigten Eigenschaften begrenzt wird. Damit:quelle