GNU/Linux >> Tutoriales Linux >  >> Linux

systemd:SIGTERM inmediatamente después del inicio

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

Linux
  1. Ssh:¿cómo ejecutar un script inmediatamente después de conectarse a través de Ssh?

  2. Centos:¿Systemd elimina el servicio inmediatamente después del inicio?

  3. ¿Por qué Systemd detiene el servicio inmediatamente después de iniciarlo?

  4. No se pueden iniciar aplicaciones X11 después de "su" o "su -" para otro usuario

  5. Systemd:Uso de After y Requires

Linux:¿cómo iniciar Systemd sin Default.target?

¿El servicio Systemd no iniciará Nodejs?

MongoDB no se inicia - *** abortando después de un error de fassert ()

En el archivo de servicio systemd, ¿cómo digo después de que el USB esté listo?

Archivo de unidad Systemd - WantedBy y After

PHP-FPM no se inicia automáticamente después de reiniciar