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 Requires
sie 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 %i
auf 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:
[email protected]
– die gemeinsame Vorlage[email protected]/overrides.conf
– zusätzliche Parameter nur für Client 1
Vorlagen, Drop-Ins und Erweiterungen wie %i werden erklärt insystemd.unit(5).