Stellen Sie sicher, dass systemd nur einen einzelnen openvpn-Prozess und nicht die gesamte Gruppe neu lädt

7

Ich führe mehrere OpenVPN-Instanzen auf meinem Server mit Debian Stable aus. sowie einige Clients als Serverinstanz. Im Moment, wenn eine dieser Instanzen fehlschlägt, scheint systemd die gesamte Gruppe von Prozessen zu beenden und neu zu starten:

27. Mai 12:09:44 Tritone Systemd [1]: openvpn@client_uk.service: Hauptprozess beendet, Code = beendet, Status = 1 / FAILURE
27. Mai 12:09:44 Tritone Systemd [1]: Die Einheit openvpn@client_uk.service ist in den Status "Fehlgeschlagen" eingetreten.
27. Mai 12:10:01 Tritone Systemd [1]: Beenden der OpenVPN-Verbindung zu client_rhode ...
27. Mai 12:10:01 Tritone Systemd [1]: OpenVPN-Verbindung zu client_uk wird gestartet ...
27. Mai 12:10:01 Tritone Systemd [1]: Beenden der OpenVPN-Verbindung zu client_ukraine ...
27. Mai 12:10:01 Tritone Systemd [1]: Beenden der OpenVPN-Verbindung zu server_udp ...
27. Mai 12:10:01 Tritone Systemd [1]: Beenden des OpenVPN-Dienstes ...
27. Mai 12:10:01 Tritone Systemd [1]: OpenVPN-Dienst wird gestartet ...
27. Mai 12:10:01 Tritone Systemd [1]: OpenVPN-Dienst gestartet.
...

Dies ist ebenso unerwünscht wie überflüssig imho. Ein Neustart des einzelnen fehlgeschlagenen Dienstes würde ausreichen. Dies ist die systemd-Konfiguration von /etc/systemd/system/multi-user.target.wants/openvpn.service:

[Einheit]
Beschreibung = OpenVPN-Dienst
Nach = network.target

[Bedienung]
Typ = OneShot
RemainAfterExit = yes
ExecStart = / bin / true
ExecReload = / bin / true
WorkingDirectory = / etc / openvpn

[Installieren]
WantedBy = multi-user.target

Ich habe Konfigurationen gesehen, auf die ExecReload eingestellt war kill -HUP $MAINPID, und auch mein Server scheint dies zu tun, wie der systemctl-Status sagt:

  Process: 5893 ExecReload=/bin/kill -HUP $MAINPID (code=exited, status=0/SUCCESS)

Also, was ich nicht verstehe, wo ist dieser Kill-Befehl definiert, wenn die systemd config ExecReload tatsächlich etwas anderes sagt? Warum wird der Dienst neu gestartet, auch wenn er Type=oneshotdefiniert ist? Schaue ich überhaupt auf die richtige Datei?

Und wie soll der Neustartbefehl aussehen? Töten wird nicht funktionieren, da der Prozess angeblich bereits tot ist.

Edit: Ich habe gefunden /lib/systemd/system-generators/openvpn-generatorund /lib/systemd/system/[email protected]jetzt bleibt es dennoch unklar, wann sie ausgeführt oder ausgeführt werden. Der Generator scheint zu versagen, da keiner der Links tatsächlich erstellt wurde, wahrscheinlich aufgrund von Selinux-Einschränkungen. Trotzdem scheint diese Datei für init verwendet zu werden. Ich frage mich also, warum die Dummy-Datei überhaupt /etc/systemd/system/multi-user.target.wants/openvpn.serviceerstellt wird.

Michael
quelle
Könnten Sie die Ausgabe der folgenden Befehle bereitstellen: $ systemctl -t service | grep openvpn und die Ausgabe von $ systemctl cat <....>. service für jede Zeile aus dem vorherigen Befehl?
Siosm
2
Vieles davon wird unter unix.stackexchange.com/questions/378749 und unter unix.stackexchange.com/questions/206058 beantwortet .
JdeBP

Antworten:

1

Wenn Sie CONFIGNAME als Konfigurationsdateinamen für Ihre .confDatei verwenden, können Sie es versuchen

systemctl restart [email protected]
Dominix
quelle
1
Dies funktioniert mit Debian.
Jim MacKenzie
Es geht nicht um einen Neustart von Hand, sondern um den automatischen Neustart der gesamten Gruppe, wenn eine einzelne abstürzt.
Michael
Es sieht für mich wie eine Fehlkonfiguration aus. Es ist nicht sinnvoll, systemctl aufzufordern, openvpn neu zu starten, da openvpn über eigene Regeln verfügt, um Instanzen neu zu starten, wenn sie fehlschlagen. Der einzige Grund für systemctl, ovpn neu zu starten, besteht darin, dass Abhängigkeiten wie die Bereitstellung des Netzwerks fehlerhaft sind.
Dominix