
Tengo un aaa.service
archivo (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 start
crea el archivo PID y service aaa status
lo 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 status
debe 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.service
si 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