Wie verwalte ich einen Systemd-Dienst, der mehrere Prozesse benötigt?

Wie verwalte ich einen Systemd-Dienst, der mehrere Prozesse benötigt?

Ich habe eine Website, für deren Ausführung mehrere Prozesse erforderlich sind (Python, Node usw.). Ich habe derzeit einen systemd-Dienst erstellt, sodass ich diese Prozesse problemlos starten und stoppen kann. Ich habe ein Startskript erstellt, das alle benötigten Prozesse als Hintergrundprozesse startet ( &an das Ende des Befehls angehängt).

Dies verhindert, dass ich die automatische Neustartfunktion von systemd nutzen kann, wenn etwas abstürzt, da alle Prozesse unter einem einzigen Skript gestartet werden.

Eine mögliche Lösung, die mir einfällt, wäre, für jeden Prozess einen Dienst zu erstellen und sie dann alle miteinander zu verknüpfen, indem man einen Masterdienst erstellt, der Requiressie alle miteinander verknüpft. Ich bin kein Fan davon, weil das bedeutet, dass ich für jede Umgebung dieser Website, die ich ausführen möchte, 4-5 Dienste erstellen muss.

Gibt es eine Möglichkeit, einfach einen Dienst zu definieren, der mehrere Prozesse startet und jeden einzeln überwacht?

Antwort1

Erstellen Sie mehrereVorlageDienste, die wie @folgt benannt sind:

Mithilfe von Vorlagen können Sie für jede Website eine benannte Instanz starten:

systemctl start [email protected] [email protected]
systemctl start [email protected] [email protected]

Innerhalb solcher Vorlageneinheiten können Sie %iauf den Instanznamen verweisen (in diesem Beispiel „Clientone“). Die „Haupt“-Einheit (Dienst oder Ziel) könnte also Folgendes haben:

[Unit]
Requires=pythonthingy@%i.service
...
[Service]
Environment="DOCROOT=/var/www/%i"

Wenn jede Site mehrere Parameter benötigt, können Sie diese aus einer Datei laden:

[Service]
EnvironmentFile=/etc/someconfigdir/%i.conf

Wenn einige Sites im Vergleich zum Rest nicht standardmäßige Einheiteneinstellungen benötigen, verwenden Sie Drop-Ins:

Vorlagen, Drop-Ins und Erweiterungen wie %i werden erklärt insystemd.unit(5).

verwandte Informationen