GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Systemd mit mehreren execStart

wenn Type=simple In Ihrer Unit-Datei können Sie nur einen ExecStart angeben, aber Sie können beliebig viele ExecStartPre hinzufügen , ExecStartPost , aber nichts davon ist für lange laufende Befehle geeignet, da sie seriell ausgeführt werden und alles, was bei einem Start gelöscht wird, bevor der nächste gestartet wird.

Wenn Type=oneshot Sie können mehrere ExecStart angeben, sie laufen seriell, nicht parallel.

Wenn Sie mehrere Einheiten parallel ausführen möchten, können Sie Folgendes tun:

Wenn sie sich in 1 Parameter unterscheiden

Sie können Vorlageneinheiten verwenden, also erstellen Sie eine /etc/systemd/system/[email protected] . HINWEIS: (die @ ist wichtig).

[Unit]
Description=script description %I

[Service]
Type=simple
ExecStart=/script.py %i
Restart=on-failure

[Install]
WantedBy=multi-user.target

Und dann führen Sie aus:

$ systemctl start [email protected] [email protected]

oder...

Zielabhängigkeiten

Sie können mehrere Einheiten erstellen, die mit einem einzelnen Ziel verknüpft sind:

#/etc/systemd/system/bar.target
[Unit]
Description=bar target
Requires=multi-user.target
After=multi-user.target
AllowIsolate=yes

Und dann ändern Sie einfach Ihre .service-Einheiten auf WantedBy=bar.target wie:

#/etc/systemd/system/[email protected]
[Unit]
Description=script description %I

[Service]
Type=simple
ExecStart=/script.py %i
Restart=on-failure

[Install]
WantedBy=bar.target

Dann aktivieren Sie einfach die gewünschten foo-Dienste parallel und starten das bar-Target wie folgt:

$ systemctl daemon-reload
$ systemctl enable [email protected]
$ systemctl enable [email protected]
$ systemctl start bar.target

HINWEIS: dass dies mit jeder Art von Einheiten funktioniert, nicht nur mit Vorlageneinheiten.


Sie können ExecStartPre verwenden oder ExecStartPost für eines der Skripte

[Unit]
Description=script description

[Service]
Type=simple
ExecStartPre=/script.py parameters1
ExecStart=/script.py parameters2
Restart=on-failure

[Install]
WantedBy=multi-user.target

Linux
  1. Verwalten Sie mehrere Dienstinstanzen mit systemctl

  2. Verwalten von Ressourcen mit cgroups in systemd

  3. So verwalten Sie systemd-Einheiten beim Start

  4. Legen Sie die Systemd Unit-Datei ab?

  5. Nicht-grafischer Boot mit Systemd?

So führen Sie Container als Systemd-Dienst mit Podman aus

Entrümpeln des Prozessmanagements mit ps oder systemd

Verwalten von cgroups mit systemd

CentOS / RHEL 7 :So ändern Sie Runlevel (Ziele) mit systemd

Signalbehandlung mit mehreren Threads in Linux

Mehrere Muster (Wörter) mit ack suchen?