Cuando finaliza start.sh, systemd mata todo en el mismo cgroup que start.sh
Sus opciones son:
-
configurando KillMode en la sección Unidad para procesar (el valor predeterminado es grupo de control). Eso hará que systemd solo elimine el proceso que activó directamente.
-
no hacer que start.sh inicie algo en segundo plano y salga, sino ejecutarlo allí mismo en primer plano
Creo que en su situación, la opción 2 es viable y más sencilla.
Fuente:https://unix.stackexchange.com/a/231201/45329
Aunque cambiando el KillMode
a process
como a continuación funcionará en su situación, no es la solución recomendada.
[Service]
KillMode=process
...
El problema con KillMode
establecido en process
es que systemd
pierde el control sobre todos los hijos del proceso que inició. Eso significa que, si sucede algo y uno de sus procesos no muere por algún motivo, seguirá dando vueltas.
Una mejor solución en su situación sería crear todos los procesos, mantener su pid
y luego esperarlos.
El comando de espera que usa en su script de shell puede variar según el shell que esté usando (el enlace que propuse es para bash). Hacer que el script de shell espere a todos los elementos secundarios es, en efecto, lo mismo que iniciar un elemento secundario, que no se separa, en primer plano.
Así que algo como esto, más o menos:
#!/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