systemd no detecta el proceso del demonio muerto

systemd no detecta el proceso del demonio muerto

Tengo un aaa.servicearchivo (que controla JBoss), que además de otras cosas normales contiene

[Service]
Type=forking
ExecStart=/my/script start
ExecReload=/my/script restart
ExecStop=/my/script stop
PIDFile=...

/my/script startcrea el archivo PID y service aaa statuslo muestra emitiendo una advertencia extraña:

Supervising process xxx which is not our child. We'll most likely not notice when it exits.

Salida completa:

   Loaded: loaded (/etc/systemd/system/aaa.service; disabled; vendor preset: disabled)
   Active: active (running) since Tue 2019-01-22 20:55:16 CET; 34min ago
  Process: 32435 ExecStart=/my/script start (code=exited, status=0/SUCCESS)
 Main PID: 32542
    Tasks: 0 (limit: 512)
   CGroup: /system.slice/aaa.service

Jan 22 20:54:56 I011-830 su[32447]: (to aaa) root on none
Jan 22 20:54:56 I011-830 su[32447]: pam_unix(su-l:session): session opened for user aaa by (uid=0)
Jan 22 20:55:16 I011-830 aaa[32435]: Starting JBoss application server: Starting JBoss application server:
Jan 22 20:55:16 I011-830 systemd[1]: aaa.service: Supervising process 32542 which is not our child. We'll most likely not notice when it exits.

Ahora mi problema real es que si el proceso se cancela de otra manera que no sea mediante la emisión service aaa stop, systemd no lo detecta. Aún más, afirma que se está ejecutando y no quiere iniciarlo de nuevo:

# cat <pid-file>
No such file or directory
# service aaa status
   Loaded: loaded (/etc/systemd/system/aaa.service; disabled; vendor preset: disabled)
   Active: active (running) since Tue 2019-01-22 20:55:16 CET; 40min ago
  Process: 32435 ExecStart=/konsens/app/aaa/init/aaastart (code=exited, status=0/SUCCESS)
 Main PID: 32542
    Tasks: 0 (limit: 512)
   CGroup: /system.slice/aaa.service
 ...
# service aaa start
# <--- Instant return, no process started

¿Cómo puedo lograr los siguientes objetivos?

  • systemd debería poder iniciar y detener mi servicio
  • service aaa statusdebe mostrar el estado del proceso independientemente de si fue iniciado por systemd o emitiendo manualmente/my/service start
  • systemd debería poder iniciar el servicio después de que se eliminó manualmente
  • systemd debería poder detener el servicio que he iniciado manualmente

Respuesta1

¿Cómo puedo lograr los siguientes objetivos? 1 systemd debería poder iniciar y detener mi servicio

La mayoría de las distribuciones tienen compatibilidad con versiones anteriores, por lo que puede almacenar su servicio en /etc/init.d/ si no desea crear un servicio nativo.

2 el estado del servicio aaa debe mostrar el estado del proceso independientemente de si fue iniciado por systemd o emitiendo manualmente /my/service start

Una forma de hacer esto es agregar una marca en su secuencia de comandos para llamar systemctl start aaa.servicesi no se llamó de esa manera para empezar. Se puede utilizar una trampa para salir.

3 systemd debería poder iniciar el servicio después de que se eliminó manualmente

resuelto por #2

4 systemd debería poder detener el servicio que comencé manualmente

resuelto por #2

información relacionada