내 프로세스가 이미 종료된 후 재부팅 시 CentOS7 systemctl이 ExecStop을 호출합니다.

내 프로세스가 이미 종료된 후 재부팅 시 CentOS7 systemctl이 ExecStop을 호출합니다.

다음과 같은 시스템 스크립트가 있습니다.

 [Unit]
 Description=My sites
 Before=shutdown.target reboot.target halt.target

 [Service]
 Type=oneshot
 ExecStart=/bin/bash -c '/etc/xxx/mySites start'
 ExecStop=/bin/bash -c '/etc/xxx/mySites stop'
 KillMode=none
 SendSIGKILL=no
 TimeoutStopUSec=5min
 TimeoutSec=5min
 TimeoutStopSec=5min


 [Install]
 WantedBy=multi-user.target

이제...실행하려고 하면 sudo systemctl start mySites.service서비스가 실행되고 모든 작업이 올바르게 시작되는 것 같습니다. 내가하면 stop그것도 작동합니다. 그런 다음 OS 부팅 시에도 올바르게 시작됩니다. 문제는 OS 종료에 있습니다. 재부팅 중인데 WAS가 너무 호출된 것 같습니다 ExecStop...하지만 너무 늦었습니다... 내 로그에서 볼 수 있듯이 내 프로세스가 모두 종료되었음을 로그에서 볼 수 있습니다.

 signal 15, SIGTERM, received from process 1 userId 0
 si_code: 0, SI_USER, signal from kill(2), sigsend(2), raise(3C) or abort(3C)
 si_signo 15  si_errno 0

그래서.. ExecStop내가 원래 시작한 프로세스를 누군가가 이미 종료했기 때문에 너무 늦게 호출된 것 같습니다. 그러나 나는 이미 Before=shutdown.target reboot.target halt.target.

문제는 ExecStop기본 시간 제한보다 시간이 더 오래 걸릴 수 있으므로 systemd가 결국 SIGTERM을 보내는 것일 수 있다고 생각합니다. 이제... , KillMode=none심지어 가능한 모든 시간 제한을 , 및 SendSIKKILL=no까지 5분으로 설정했습니다 (확실히 5분 미만이 소요됩니다).TimeoutStopUSecTimeoutSecTimeoutStopSecExecStop

아직도 운이 없습니다.

이 문제를 어떻게 해결할 수 있을까요? CentOS 7을 실행 중입니다.

미리 감사드립니다.

답변1

노력하다

[Unit]
Description=My sites
After=NetworkManager.service
Requires=NetworkManager.service

[Service]
Type=oneshot
ExecStart=/bin/bash -c '/etc/xxx/mySites start'
ExecStop=/bin/bash -c '/etc/xxx/mySites stop'
RemainAfterExit=true

[Install]
WantedBy=multi-user.target

관련 정보