Starten und stoppen Sie eine Systemeinheit mit einer anderen

8

Ich habe zwei Dienste A.service und B.service. Ich möchte, dass B gestoppt wird, wenn A beendet wird / getötet wird / gestoppt wird. Außerdem möchte ich, dass B neu gestartet wird, wenn A neu gestartet wird. Ich habe die Antwort unter Starten und Stoppen einer systemd-Einheit mit einer anderen ausprobiert . und richten Sie meine Dateien wie folgt ein: -

Ein Dienst

[Unit]
Description=A
Before=B.service
Requires=B.service
[Service]
ExecStart=/usr/share/A
ExecStopPost=/usr/evo/exit_handler.sh %p
Restart=always
StartLimitBurst=3
StartLimitInterval=300

B.service

[Unit]
Description=B
BindsTo=A.service

[Service]
Type=forking
ExecStart=/usr/share/B start
ExecStop=/usr/share/B stop
StartLimitBurst=5
StartLimitInterval=10
Restart=always

Wenn ich A töte oder einen System-Neustart von A durchführe, sehe ich, dass B neu gestartet wird. Wenn A jedoch mit dem Status 0 beendet wird, wird B nicht neu gestartet. Ich habe die systemd-Debug-Protokollierung aktiviert und sehe, dass sich der Status von A in "tot" ändert, jedoch nicht in "automatisch neu starten"

Bug Killer
quelle

Antworten:

4

Ihre B-Einheit verwendet BindsTo=, um den Status einer Einheit zu verfolgen, die möglicherweise verschwindet .

Was Sie wollen , anstatt hierfür ist PartOf=, wo dieser Dienst genau den Status des benannten Dienst verfolgen. Aus der Dokumentation :

PartOf=
Konfiguriert Abhängigkeiten ähnlich Requires=, aber beschränkt auf das Stoppen und Neustarten von Einheiten. Wenn systemd die hier aufgeführten Einheiten stoppt oder neu startet, wird die Aktion an diese Einheit weitergegeben. Beachten Sie, dass dies eine Einwegabhängigkeit ist. Änderungen an dieser Einheit wirken sich nicht auf die aufgelisteten Einheiten aus.

Ich denke jedoch nicht, dass dies alle Ihre Probleme beheben wird . Ich vermute, Sie haben die tatsächlichen Abhängigkeiten zwischen Ihren beiden Diensten nicht sorgfältig genug berücksichtigt und müssen noch etwas nachdenken (und sich ausdrücken können), bevor Sie diese Einheiten dazu bringen können, das zu tun, was sie tun müssen.

Michael Hampton
quelle
Vielen Dank! Ich werde das ausprobieren. Könnten Sie diese Probleme näher erläutern?
Bug Killer
1
Überlegen Sie genau, welcher Dienst tatsächlich vom anderen abhängt, wie sich jeder in Abwesenheit des anderen verhält oder wann der andere abstürzt.
Michael Hampton