Systemd avec plusieurs execStart [fermé]

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

[Unit]
Description=script description

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

[Install]
WantedBy=multi-user.target

est-ce possible? alors il sera lancé en mode série? ou dans deux différents processus? Meilleures salutations!--2-->

13
demandé sur Riccardo 2018-01-10 23:12:52

2 réponses

si Type=simple dans votre fichier unit, vous ne pouvez spécifier Qu'un seul Exécustart, mais vous pouvez ajouter autant de ExecStartPre, ExecStartPost`, mais rien de tout cela n'est adapté aux commandes de longue durée, car elles sont exécutées en série et tout début est tué avant de commencer le suivant.

Si Type=oneshot vous pouvez spécifier plusieurs ExecStart, ils ne s'exécutent pas en parallèle.

Si ce que vous voulez est d'exécuter plusieurs unités en parallèle, il y a quelques choses que vous pouvez faire:

S'ils diffèrent sur 1 param

vous pouvez utiliser des unités de template, donc vous créez un /etc/systemd/system/foo@.service. NOTE: (@ 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 exec:

$ systemctl start foo@parameter1.service foo@parameter2.service

ou...

dépendances des cibles

vous pouvez créer plusieurs unités qui se lient à une seule cible:

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

et puis vous vous modifiez .les unités de service WantedBy=bar.target comme:

#/etc/systemd/system/foo@.service
[Unit]
Description=script description %I

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

[Install]
WantedBy=bar.target

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

$ systemctl daemon-reload
$ systemctl enable foo@param1.service
$ systemctl enable foo@param2.service
$ systemctl start bar.target

NOTE: que cela fonctionne avec n'importe quel type d'Unités non seulement les unités de modèle.

22
répondu aleivag 2018-03-06 16:59:23

Vous pouvez utiliser ExecStartPre ou ExecStartPost pour l'un de scripts

[Unit]
Description=script description

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

[Install]
WantedBy=multi-user.target
2
répondu amin khozaei 2018-01-10 20:57:31