![Gibt es eine Möglichkeit, zwei instanziierte Systemd-Dienste als eine einzige Einheit zu steuern?](https://rvso.com/image/567638/Gibt%20es%20eine%20M%C3%B6glichkeit%2C%20zwei%20instanziierte%20Systemd-Dienste%20als%20eine%20einzige%20Einheit%20zu%20steuern%3F.png)
Ich versuche, ein paar Python-Webdienste auf einer Fedora 15-Box auszuführen. Sie werden von Paster ausgeführt und der einzige Unterschied beim Starten besteht in der Konfigurationsdatei, die sie lesen.
Dies scheint gut zu den instantiierten Diensten von systemd zu passen, aber ich möchte sie gerne als eine einzige Einheit steuern können. Ein systemd-Ziel, das beide Dienste erfordert, scheint der richtige Ansatz dafür zu sein. Beim Starten des Ziels werden zwar beide Dienste gestartet, aber beim Stoppen des Ziels werden sie weiterhin ausgeführt.
Hier ist die Servicedatei:
[Unit]
Description=AUI Instance on Port %i
After=syslog.target
[Service]
WorkingDirectory=/usr/local/share/aui
ExecStart=/opt/cogo/bin/paster serve --log-file=/var/log/aui/%i deploy-%i.ini
Restart=always
RestartSec=2
User=aui
Group=aui
[Install]
WantedBy=multi-user.target
Und hier ist die Zieldatei:
[Unit]
Description=AUI
[email protected]
[email protected]
After=syslog.target
[Install]
WantedBy=multi-user.target
Ist diese Art der Gruppierung mit systemd überhaupt möglich?
Antwort1
Versuchen Sie, die BindsTo
Option zum Zusammenbinden der Einheiten zu verwenden. Die systemd.unit(5)
Handbuchseite beschreibt es folgendermaßen:
BindsTo=
Konfiguriert Anforderungsabhängigkeiten, sehr ähnlich im Stil zu Requires=, aber zusätzlich zu diesem Verhalten erklärt es auch, dass diese Einheit gestoppt wird, wenn eine der aufgelisteten Einheiten plötzlich verschwindet. Einheiten können plötzlich und unerwartet verschwinden, wenn ein Dienst nach eigenem Ermessen beendet wird, ein Gerät ausgesteckt wird oder ein Einhängepunkt ohne Beteiligung von systemd ausgehängt wird.
Das klingt, als ob es Ihren Wünschen entspricht und eine Einheit mit der anderen verbindet, so dass immer, wenn der Master stoppt, auch der Slave stoppt und umgekehrt beim Starten.
Vergessen Sie nicht, dass Sie bei Bedarf auch Before
/ verwenden können After
, um die Reihenfolge anzugeben, in der sie gestartet werden sollen.