
나는 aaa.service
다른 일반 항목 외에도 다음을 포함하는 파일(JBoss 제어)을 가지고 있습니다.
[Service]
Type=forking
ExecStart=/my/script start
ExecReload=/my/script restart
ExecStop=/my/script stop
PIDFile=...
/my/script start
PID 파일을 생성하고 service aaa status
이상한 경고가 발생하는 것을 보여줍니다.
Supervising process xxx which is not our child. We'll most likely not notice when it exits.
전체 출력:
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.
이제 내 실제 문제는 프로세스가 다른 프로세스를 실행하여 종료되면 service aaa stop
systemd가 이를 감지하지 못한다는 것입니다. 더 나아가 실행 중이며 다시 시작하고 싶지 않다고 주장합니다.
# 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
다음 목표를 어떻게 달성할 수 있나요?
- systemd는 내 서비스를 시작하고 중지할 수 있어야 합니다.
service aaa status
systemd에 의해 시작되었거나 수동으로 실행되었는지 여부에 관계없이 프로세스의 상태를 표시해야 합니다./my/service start
- systemd는 수동으로 종료된 후 서비스를 시작할 수 있어야 합니다.
- systemd는 내가 수동으로 시작한 서비스를 중지할 수 있어야 합니다.
답변1
다음 목표를 어떻게 달성할 수 있나요? 1 systemd는 내 서비스를 시작하고 중지할 수 있어야 합니다.
대부분의 배포판에는 이전 버전과의 호환성이 있으므로 기본 서비스를 만들고 싶지 않은 경우 /etc/init.d/에 서비스를 저장할 수 있습니다.
2 서비스 aaa 상태는 systemd에 의해 시작되었는지 또는 /my/service start를 수동으로 실행했는지에 관계없이 프로세스 상태를 표시해야 합니다.
systemctl start aaa.service
이를 수행하는 한 가지 방법은 처음부터 그렇게 호출되지 않은 경우 호출할 수 있도록 스크립트에 검사를 추가하는 것입니다 . 출구에는 함정을 사용할 수 있습니다.
3 systemd는 수동으로 종료된 후 서비스를 시작할 수 있어야 합니다.
#2로 해결됨
4 systemd는 내가 수동으로 시작한 서비스를 중지할 수 있어야 합니다.
#2로 해결됨