
다음과 같은 시스템 스크립트가 있습니다.
[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분 미만이 소요됩니다).TimeoutStopUSec
TimeoutSec
TimeoutStopSec
ExecStop
아직도 운이 없습니다.
이 문제를 어떻게 해결할 수 있을까요? 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