GNU/Linux >> Linux Esercitazione >  >> Linux

Systemd con più execStart

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

Linux
  1. Utilizzo di più modelli contemporaneamente con il comando Sed

  2. Systemd sa ancora dei runlevel?

  3. Mettere il file dell'unità Systemd?

  4. Avvio non grafico con Systemd?

  5. CentOS / RHEL 7:come modificare i runlevel (target) con systemd

Gestisci più istanze del servizio con systemctl

Gestire le risorse con cgroup in systemd

Come eseguire container come servizio Systemd con Podman

Decluttering la gestione dei processi con ps o systemd

Gestire cgroup con systemd

systemd - Dando al mio servizio più argomenti