GNU/Linux >> Linux Esercitazione >  >> Linux

systemd:SIGTERM subito dopo l'avvio

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

Linux
  1. Ssh:come eseguire uno script immediatamente dopo la connessione tramite Ssh?

  2. Systemd:utilizzo sia di After che di Requires

  3. Come avviare un servizio systemd dopo l'accesso dell'utente e interromperlo prima del logout dell'utente

  4. Disattivare un servizio systemd dopo il periodo di inattività

  5. Upstart :avvia il servizio dopo il processo non upstart

Mancato avvio di MongoDB - ***interruzione dopo l'errore di fassert()

Nel file di servizio systemd, come posso dire dopo che l'USB è pronto?

systemctl arresta il servizio Tomcat immediatamente dopo l'avvio

Script di avvio postgresql di systemd

File unità Systemd - WantedBy e After

PHP-FPM non si avvia automaticamente dopo il riavvio