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