Si Type=simple
dans votre fichier unité, vous ne pouvez spécifier qu'un seul ExecStart, mais vous pouvez ajouter autant d'ExecStartPre
, ExecStartPost
, mais rien de tout cela n'est adapté pour les commandes longues, car elles sont exécutées de manière sérielle et tout ce qui démarre est arrêté avant de démarrer le suivant.
Si Type=oneshot
vous pouvez spécifier plusieurs ExecStart, ils s'exécutent de manière sérielle et non 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:
Si elles diffèrent sur 1 paramètre
Vous pouvez utiliser des unités modèles, ainsi vous créez un /etc/systemd/system/foo@.service
. REMARQUE: (le @
est important).
[Unit]
Description=description du script %I
[Service]
Type=simple
ExecStart=/script.py %i
Restart=on-failure
[Install]
WantedBy=multi-user.target
Et ensuite vous exécutez:
$ systemctl start foo@paramètre1.service foo@paramètre2.service
ou...
Dépendances de cible
Vous pouvez créer plusieurs unités qui se lient à une seule cible:
#/etc/systemd/system/bar.target
[Unit]
Description=cible bar
Requires=multi-user.target
After=multi-user.target
AllowIsolate=yes
Et ensuite vous modifiez vos unités .service pour être WantedBy=bar.target
comme suit:
#/etc/systemd/system/foo@.service
[Unit]
Description=description du script %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 bar de cette façon:
$ systemctl daemon-reload
$ systemctl enable foo@param1.service
$ systemctl enable foo@param2.service
$ systemctl start bar.target
REMARQUE: que cela fonctionne avec tout type d'unités pas seulement les unités modèles.
3 votes
Pourquoi diable cela a-t-il été fermé? La question implique clairement un problème spécifique et des outils logiciels utilisés principalement par les programmeurs.