Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

340
Views
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 answers
Answer question

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 Report

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!