Quando start.sh finisce, systemd uccide tutto nello stesso cgroup di start.sh
Le tue opzioni sono:
-
impostando KillMode nella sezione Unit su process (l'impostazione predefinita è control-group). Ciò farà sì che systemd interrompa solo il processo che ha avviato direttamente.
-
per non fare in modo che start.sh avvii qualcosa in background ed esca, ma per eseguirlo proprio lì in primo piano
Penso che nella tua situazione l'opzione 2 sia fattibile e più semplice.
Fonte:https://unix.stackexchange.com/a/231201/45329
Anche se cambiando il KillMode
a process
come di seguito funzionerà nella tua situazione, non è la soluzione consigliata.
[Service]
KillMode=process
...
Il problema con KillMode
impostato su process
è quel systemd
perde il controllo su tutti i figli del processo che ha avviato. Ciò significa che se succede qualcosa e uno dei tuoi processi non muore per qualche motivo, continuerà a persistere.
Una soluzione migliore nella tua situazione sarebbe quella di creare tutti i processi, mantenendo il loro pid
e poi aspettali.
Il comando wait che usi nel tuo script di shell può variare a seconda della shell che stai usando (il collegamento che ho proposto è per bash). Avere lo script della shell in attesa di tutti i figli è in effetti come avviare un figlio, che non viene staccato, in primo piano.
Quindi qualcosa del genere, più o meno:
#!/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