
Eu tenho um aaa.service
arquivo (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 start
cria o arquivo PID e service aaa status
mostra-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 status
deve 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.service
se 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