Lorsque start.sh se termine, systemd tue tout dans le même groupe de contrôle que start.sh
Vos options sont :
-
définir KillMode dans la section Unit à traiter (la valeur par défaut est control-group). Cela obligera systemd à ne tuer que le processus qu'il a directement déclenché.
-
de ne pas faire démarrer start.sh quelque chose en arrière-plan et de le quitter, mais de l'exécuter directement au premier plan
Je pense que dans votre situation, l'option 2 est viable et plus simple.
Source :https://unix.stackexchange.com/a/231201/45329
Bien que changer le KillMode
à process
comme ci-dessous fonctionnera dans votre situation, ce n'est pas la solution recommandée.
[Service]
KillMode=process
...
Le problème avec KillMode
défini sur process
est-ce systemd
perd le contrôle de tous les enfants du processus qu'il a démarré. Cela signifie que si quelque chose se passe et que l'un de vos processus ne meurt pas pour une raison quelconque, il continuera à s'attarder.
Une meilleure solution dans votre situation serait de créer tous les processus, en gardant leur pid
puis attendez-les.
La commande d'attente que vous utilisez dans votre script shell peut varier en fonction du shell que vous utilisez (le lien que j'ai proposé est pour bash). Faire attendre le script shell pour tous les enfants revient en fait à démarrer un enfant, qui ne se détache pas, au premier plan.
Donc quelque chose comme ça, plus ou moins :
#!/bin/bash
# Start your various processes
process1 &
PROCESS1_PID=$!
process2 &
PROCESS2_PID=$!
process3 &
PROCESS3_PID=$!
# Wait on your processes
wait $PROCESS1_PID $PROCESS2_PID $PROCESS3_PID
# OR, if I'm correct, bash also allows you to wait on all children
# with just a plain wait like so:
wait
# reach here only after children 1, 2, and 3 died