it-swarm.com.de

Systemd mit mehreren execStart

ich würde wissen, ob es möglich ist, einen Dienst mit demselben Skript zu erstellen, das mit verschiedenen Eingabeparametern gestartet wurde. Sowie:

[Unit]
Description=script description

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

[Install]
WantedBy=multi-user.target

ist es möglich? wird es dann in den seriellen Modus gestartet? oder in zwei verschiedene prozesse? Freundliche Grüße

31
Riccardo

wenn Type=simple In Ihrer Unit-Datei können Sie nur einen ExecStart angeben, aber Sie können beliebig viele ExecStartPre,ExecStartPost`, aber nichts davon eignet sich für Befehle mit langer Laufzeit, da sie seriell ausgeführt werden und alles, was beim Start ausgeführt wird, vor dem nächsten abgebrochen wird.

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

Wenn Sie mehrere Geräte parallel betreiben möchten, können Sie Folgendes tun:

Wenn sie sich in 1 Parameter unterscheiden

Sie können Vorlageneinheiten verwenden, also erstellen Sie ein /etc/systemd/system/[email protected]. HINWEIS: (das @ 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 modifizierst du einfach deine .service-Einheiten so, dass sie WantedBy=bar.target mögen:

#/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 Balkenziel 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.

47
aleivag

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

[Unit]
Description=script description

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

[Install]
WantedBy=multi-user.target
9
amin khozaei