web-dev-qa-db-fra.com

Systemd avec plusieurs execStart

je saurais s'il est possible de créer un service avec le même script démarré avec différents paramètres d'entrée. Tel que:

[Unit]
Description=script description

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

[Install]
WantedBy=multi-user.target

c'est possible? alors il sera lancé en mode série? ou dans deux processus différents? Meilleures salutations

31
Riccardo

si _Type=simple_ dans votre fichier d'unité, vous ne pouvez spécifier qu'un seul ExecStart, mais vous pouvez ajouter autant de _ExecStartPre,_ ExecStartPost`, mais rien de tout cela ne convient aux commandes longues, car elles sont exécutées en série et tout le reste. start est tué avant de commencer le suivant.

Si _Type=oneshot_, vous pouvez spécifier plusieurs ExecStart, ils s'exécutent en série et non en parallèle.

Si vous voulez faire fonctionner plusieurs unités en parallèle, voici ce que vous pouvez faire:

S'ils diffèrent sur 1 param

Vous pouvez utiliser des unités de modèle pour créer un _/etc/systemd/system/[email protected]_. NOTE: (le _@_ est important).

_[Unit]
Description=script description %I

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

[Install]
WantedBy=multi-user.target
_

Et puis vous exécutez:

_$ systemctl start [email protected] [email protected]
_

ou...

Dépendances cibles

Vous pouvez créer plusieurs unités liées à une seule cible:

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

Et ensuite, vous modifiez simplement vos unités de service pour qu'elles soient _WantedBy=bar.target_ comme:

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

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

[Install]
WantedBy=bar.target
_

Ensuite, vous activez simplement les services foo que vous voulez en parallèle et démarrez la cible de la barre comme ceci:

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

NOTE: que cela fonctionne avec n'importe quel type d'unités et pas seulement des unités modèles.

47
aleivag

Vous pouvez utiliser ExecStartPre ou ExecStartPost pour l’un des scripts

[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