systemd não detecta processo daemon morto

systemd não detecta processo daemon morto

Eu tenho um aaa.servicearquivo (controlando o JBoss), que além de outras coisas normais contém

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

/my/script startcria o arquivo PID e service aaa statusmostra-o emitindo um aviso estranho:

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

Saída 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.

Agora, meu problema real é que, se o processo for eliminado de outra forma, emitindo service aaa stop, o systemd não o detecta. Ainda mais afirma que está funcionando e não quer iniciá-lo novamente:

# 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

Como posso alcançar os seguintes objetivos?

  • systemd deve ser capaz de iniciar e parar meu serviço
  • service aaa statusdeve mostrar o status do processo independentemente de ter sido iniciado pelo systemd ou emitindo manualmente/my/service start
  • o systemd deve ser capaz de iniciar o serviço depois de ter sido eliminado manualmente
  • o systemd deve ser capaz de interromper o serviço, que eu iniciei manualmente

Responder1

Como posso alcançar os seguintes objetivos? 1 systemd deve ser capaz de iniciar e parar meu serviço

A maioria das distribuições tem compatibilidade com versões anteriores, então você pode armazenar seu serviço em /etc/init.d/ se não quiser criar um serviço nativo.

2 status do serviço aaa deve mostrar o status do processo, independentemente de ele ter sido iniciado pelo systemd ou emitindo manualmente /my/service start

Uma maneira de fazer isso é adicionar uma verificação em seu script para chamar systemctl start aaa.servicese ele não foi chamado dessa forma para começar. uma armadilha pode ser usada para saída.

3 O systemd deve ser capaz de iniciar o serviço depois de ter sido eliminado manualmente

resolvido por #2

4 o systemd deve ser capaz de interromper o serviço que iniciei manualmente

resolvido por #2

informação relacionada