se Type=simple
nel tuo file unit, puoi specificare solo un ExecStart, ma puoi aggiungere fino a ExecStartPre
, ExecStartPost
, ma niente di tutto questo è adatto per comandi di lunga durata, perché vengono eseguiti in serie e tutto ciò che viene avviato viene interrotto prima di avviare quello successivo.
Se Type=oneshot
è possibile specificare più ExecStart, vengono eseguiti in serie non in parallelo.
Se quello che vuoi è eseguire più unità in parallelo, ci sono alcune cose che puoi fare:
Se differiscono su 1 parametro
Puoi utilizzare unità modello, quindi crei un /etc/systemd/system/[email protected]
. NOTA: (il @
è importante).
[Unit]
Description=script description %I
[Service]
Type=simple
ExecStart=/script.py %i
Restart=on-failure
[Install]
WantedBy=multi-user.target
E poi esegui:
$ systemctl start [email protected] [email protected]
oppure...
Dipendenze target
Puoi creare più unità che si collegano a un singolo obiettivo:
#/etc/systemd/system/bar.target
[Unit]
Description=bar target
Requires=multi-user.target
After=multi-user.target
AllowIsolate=yes
E poi devi solo modificare le tue unità .service in modo che siano WantedBy=bar.target
come:
#/etc/systemd/system/[email protected]
[Unit]
Description=script description %I
[Service]
Type=simple
ExecStart=/script.py %i
Restart=on-failure
[Install]
WantedBy=bar.target
Quindi devi solo abilitare i servizi foo che desideri in parallelo e avviare il target della barra in questo modo:
$ systemctl daemon-reload
$ systemctl enable [email protected]
$ systemctl enable [email protected]
$ systemctl start bar.target
NOTA: che questo funziona con qualsiasi tipo di unità non solo unità modello.
Puoi usare ExecStartPre
o ExecStartPost
per uno degli script
[Unit]
Description=script description
[Service]
Type=simple
ExecStartPre=/script.py parameters1
ExecStart=/script.py parameters2
Restart=on-failure
[Install]
WantedBy=multi-user.target