Když start.sh skončí, systemd zabije vše ve stejné cgroup jako start.sh
Vaše možnosti jsou:
-
nastavení KillMode v sekci Unit ke zpracování (výchozí nastavení je control-group). To způsobí, že systemd zabije pouze proces, který přímo spustil.
-
aby start.sh nespustil něco na pozadí a skončil, ale aby to spustil přímo tam v popředí
Myslím, že ve vaší situaci je možnost 2 životaschopná a přímočařejší.
Zdroj:https://unix.stackexchange.com/a/231201/45329
I když se změní KillMode
do process
jako níže bude ve vaší situaci fungovat, není to doporučené řešení.
[Service]
KillMode=process
...
Problém s KillMode
nastavte na process
je to systemd
ztrácí kontrolu nad všemi dětmi procesu, který začal. To znamená, že pokud se cokoli stane a jeden z vašich procesů z nějakého důvodu nezemře, bude se dále zdržovat.
Lepším řešením ve vaší situaci by bylo vytvořit všechny procesy, zachovat jejich pid
a pak na ně počkejte.
Příkaz wait, který používáte ve skriptu shellu, se může lišit v závislosti na tom, který shell používáte (odkaz, který jsem navrhl, je pro bash). Nechat skript shellu čekat na všechny potomky je ve skutečnosti stejné jako spouštět v popředí jednoho potomka, který se neoddělí.
Takže něco takového, víceméně:
#!/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