서버가 종료/다시 시작되기 전에 스크립트를 실행하는 서비스를 systemd에서 성공적으로 만들었습니다. 그러나 문제는 내 스크립트를 실행하는 데 너무 오랜 시간이 걸리고(약 3-4분) 서버가 완료되기 전에 종료된다는 것입니다. 디버그 로그에는 스크립트가 실제로 실행 중이었지만 중간에 중지되었음을 표시합니다.
이 서비스를 구현한 두 가지 방법은 다음과 같습니다.
[Unit]
Description=Stop Service
[Service]
Type=oneshot
RemainAfterExit=true
ExecStart=/bin/true
ExecStop=/home/user/stop-service.sh
[Install]
WantedBy=multi-user.target
그리고
[Unit]
Description=Stop Service
DefaultDependencies=no
Before=final.target
[Service]
ExecStart=/home/user/stop-service.sh
[Install]
WantedBy=final.target
모두 성공적으로 호출되지만 stop-service.sh
스크립트를 실행하는 데 시간이 너무 오래 걸립니다. stop-service.sh
서버가 완전히 종료되기 전에 실행이 완료되도록 할 수 있는 방법이 있습니까 ?
내 서버는 RHEL7입니다.
답변1
나에게 맞는 방법을 찾았습니다.
[Unit]
Description=Stop Service
[Service]
Type=oneshot
RemainAfterExit=true
ExecStart=/bin/true
ExecStop=/home/user/stop-service.sh
TimeoutStopSec=300
[Install]
WantedBy=multi-user.target
내 연구에 따르면 각 서비스가 중지 명령(ExecStop)을 실행하기 위한 기본 대기 시간은 systemd 서비스가 터미널 신호를 보내기 전 90초입니다. TimeoutStopSec=300은 특정 서비스에 대한 대기 시간을 5분으로 설정합니다.
기본 대기 시간을 변경하려면 /etc/systemd/system.conf 파일을 찾아 DefaultTimeoutStopSec 값을 수정한 후 다음 명령을 사용하여 데몬 프로세스를 다시 로드할 수 있습니다.
systemctl daemon-reload
새로운 값을 로드합니다.