ExecStop 스크립트가 systemd에서 실행되도록 하는 이벤트는 무엇입니까?

ExecStop 스크립트가 systemd에서 실행되도록 하는 이벤트는 무엇입니까?

여러 Tomcat 인스턴스를 호출하는 시스템 서비스가 있습니다.

[Unit]
Description=Tomcat Services
After=network.target multi-user.target

[Service]
Type=forking
ExecStart=/users/mwe/scripts/appstart.sh
ExecStop=/users/mwe/scripts/appstop.sh
Restart=on-abort
User=webapp
Group=webgrp

[Install]
WantedBy=multi-user.target

시스템을 패치/재부팅했고 서비스가 예상대로 시작되었습니다.

Jul 10 20:38:02 a8cc08d appstart.sh[5989]: [AA00001654][AA00001654_PRD] - Remove all log files older than 90 days ...
Jul 10 20:38:03 a8cc08d appstart.sh[5989]: [etp][ciiprod] - Remove all log files older than 90 days ...
Jul 10 20:38:03 a8cc08d appstart.sh[5989]: [etp][ciiprod] -----------------------------
...
Jul 10 20:38:08 a8cc08d systemd[1]: Started Tomcat Services.

그러나 약 22.5시간 후에 ExecStop 스크립트가 systemd에 의해 실행된 것으로 보입니다.

Jul 11 19:00:07 a8cc08d appstop.sh[29451]: [etp][ciiprod] -----------------------------
Jul 11 19:00:48 a8cc08d appstop.sh[29451]: [2.0K blob data]
Jul 11 19:00:48 a8cc08d appstop.sh[29451]: Completed execution of . / tcruntime-ctl.sh
Jul 11 19:00:48 a8cc08d appstop.sh[29451]: [oasys][ciiprod] -----------------------------
Jul 11 19:00:48 a8cc08d appstop.sh[29451]: tcServer is not running for environment: ciiprod.
Jul 11 19:00:48 a8cc08d appstop.sh[29451]: Completed execution of . / tcruntime-ctl.sh
Jul 11 19:00:48 a8cc08d appstop.sh[29451]: [report][ciiprod] -----------------------------

현재 로그인된 사용자가 없고, 구성된 cron 작업도 없고, autosys 작업도 없습니다. 이런 일이 발생하면 systemd가 ExecStop 스크립트 자체를 호출하는 이유를 이해할 수 없습니다. 서비스가 "충돌"하면 ExecStop이 실행된다는 내용을 읽었지만 이를 어떻게 결정합니까? systemd는 서비스 실패를 로그에 보고하지 않습니까? 각 종료 신호로 애플리케이션 프로세스 종료를 테스트했지만 이 동작을 재현할 수 없었습니다. 다시 시작하거나(Restart=on-abort) 오류만 보고하고(완전히 종료하는 경우) 항상 로그에 오류를 기록합니다. "systemctl stop"이 실행되고 있지 않다는 것을 알고 있습니다. 왜냐하면 "Stopping"과 서비스 설명이 로그에 삽입되기 때문입니다. 그러나 이는 사실이 아닙니다. 나타나는 것은 appstop.sh 스크립트(ExecStop)의 출력뿐입니다.

RHEL 7.9. Red Hat과 관련된 사례가 있지만 그들이 systemd를 조사하여 답을 찾을 것이라고 확신하지 않습니다.

고쳐 쓰다:더 많은 조사 결과에 따르면 Tomcat 인스턴스 중 하나를 종료하고 다시 시작하는 Autosys 작업이 있으며 시간은 appstop.sh가 실행되는 시간과 일치합니다. 인스턴스가 systemd 외부에서 중지되면 systemd가 전체 cgroup이 건강하지 않거나 서비스가 중단되어 정리를 시도한다고 생각할 수 있습니까? 나는 백그라운드 "절전" 프로세스를 실행하는 서비스를 발명하여 이를 복제하려고 합니다. 그러나 마지막 남은 수면을 제외한 모든 수면을 죽일 수 있으며 systemd는 신경 쓰지 않습니다. 마지막 서비스를 종료하면 systemd는 실패한 서비스를 기록합니다.

관련 정보