si Type=simple
dans votre fichier unité, vous ne pouvez spécifier qu'un seul ExecStart, 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 ce qu'un démarrage est tué avant de démarrer 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 souhaitez exécuter plusieurs unités en parallèle, vous pouvez faire plusieurs choses :
S'ils diffèrent sur 1 paramètre
Vous pouvez utiliser des unités de modèle, vous créez donc un /etc/systemd/system/[email protected]
. REMARQUE : (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 associées à 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 modifiez simplement vos unités .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, il vous suffit d'activer les services foo que vous souhaitez en parallèle et de démarrer la barre cible comme ceci :
$ systemctl daemon-reload
$ systemctl enable [email protected]
$ systemctl enable [email protected]
$ systemctl start bar.target
REMARQUE : que cela fonctionne avec n'importe quel type d'unités, pas seulement les unités de modèle.
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