Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

342
Vistas
systemd: SIGTERM inmediatamente después del inicio

Estoy probando systemd por primera vez. Quiero iniciar un proceso en el arranque del sistema. Y tengo un problema para ponerlo en marcha.

systemd debe ejecutar un script (start.sh). Este script inicia un proceso (vamos a llamarlo P) en segundo plano y sale con el código 0. P sigue ejecutándose para siempre hasta que se produce una señal.

Si ejecuto start.sh manualmente, todo está bien.

Si lo dejo comenzar por systemd P obtiene inmediatamente después del inicio un SIGTERM y termina.

Así que empieza, pero ¿qué pasa con la señal? Termina P y no estoy seguro de cuál es su origen y el motivo.

Tal vez mi unidad esté mal, pero no tengo idea de cómo configurarla para mis necesidades. Probé el tipo de servicio simple, inactivo y oneshot.

¡Gracias por la ayuda! cris

Aquí está mi unidad.

 [Unit] Description=Test After=sshd.service [Service] Type=oneshot ExecStart=/home/max/start.sh start Restart=no User=root SuccessExitStatus=0 [Install] WantedBy=multi-user.target

Ese es el estado.

 Loaded: loaded (/etc/systemd/system/test.service; enabled) Active: inactive (dead) since Die 2016-02-23 20:56:59 CET; 20min ago Process: 1046 ExecStart=/home/max/test.sh start (code=exited, status=0/SUCCESS)
over 4 years ago · Santiago Trujillo
2 Respuestas
Responde la pregunta

0

Cuando finaliza start.sh, systemd mata todo en el mismo cgroup que start.sh

Tus 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 disparó 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

over 4 years ago · Santiago Trujillo Denunciar

0

Aunque cambiar KillMode para process como se muestra a continuación funcionará en su situación, no es la solución recomendada.

 [Service] KillMode=process ...

El problema con KillMode configurado para process es que systemd pierde el control sobre todos los elementos secundarios 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
over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda