GNU/Linux >> Znalost Linux >  >> Linux

systemd:SIGTERM ihned po startu

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

Linux
  1. OpenDKIM se po upgradu z Jessie na Stretch nespustí

  2. Centos – Systemd ukončí službu ihned po spuštění?

  3. Jak automaticky vynutit Fsck disky po havárii v `systemd`?

  1. Proč Systemd zastavuje službu ihned po jejím spuštění?

  2. Služba Systemd nespustí Nodejs?

  3. MongoDB Failing to Start - ***přerušení po selhání fassert().

  1. Jak spustit službu systemd po přihlášení uživatele a zastavit ji před odhlášením uživatele

  2. Jak řeknu v servisním souboru systemd, když je USB připraveno?

  3. systemctl zastaví službu Tomcat ihned po spuštění