머신 종료 또는 재부팅시 시스템을 정상적으로 종료하는 시스템 서비스는 어떻게 작성합니까? 특히, 시스템이 정상적으로 종료 될 때까지 시스템 종료를 지연시켜야합니다.
종료하는 데 10 초가 걸리는 서비스가 있습니다 : /usr/local/bin/shutdowntest.sh :
#!/bin/bash
SHUTDOWN=0
SHUTDOWN_TIME=10
TRAPPED_SIGNAL=
function onexit() {
TRAPPED_SIGNAL=$1
SHUTDOWN=1
}
for SIGNAL in SIGINT SIGTERM SIGHUP SIGPIPE SIGALRM SIGUSR1 SIGUSR2; do
trap "onexit $SIGNAL" $SIGNAL
done
echo >&2 "shutdowntest running"
while ((!SHUTDOWN || SHUTDOWN_TIME>0)); do
if [[ -n "$TRAPPED_SIGNAL" ]]; then
echo >&2 "shutdowntest received signal $TRAPPED_SIGNAL"
TRAPPED_SIGNAL=
elif ((SHUTDOWN)); then
echo >&2 "shutdowntest Shutting down: $SHUTDOWN_TIME more sleeps"
SHUTDOWN_TIME=$((SHUTDOWN_TIME-1))
sleep 1
else
sleep 10
fi
done
echo >&2 "shutdowntest Finished shutting down; quitting"
/etc/systemd/system/shutdowntest.service에서 TimeoutStopSec을 15 초로 설정했습니다.
[Service]
ExecStart=/usr/local/bin/shutdowntest.sh
TimeoutStopSec=15
[Install]
WantedBy=multi-user.target
내가 실행 sudo systemctl stop shutdowntest.service
하면 서비스가 다음 과 같이 정상적으로 종료됩니다 /var/log/syslog
.
00:57:11 shutdowntest.sh[1980]: shutdowntest received signal SIGTERM
00:57:11 shutdowntest.sh[1980]: shutdowntest Shutting down: 10 more sleeps
00:57:11 systemd[1]: Stopping shutdowntest.service...
00:57:11 shutdowntest.sh[1980]: Terminated
00:57:11 shutdowntest.sh[1980]: shutdowntest Shutting down: 9 more sleeps
00:57:12 shutdowntest.sh[1980]: shutdowntest Shutting down: 8 more sleeps
00:57:13 shutdowntest.sh[1980]: shutdowntest Shutting down: 7 more sleeps
00:57:14 shutdowntest.sh[1980]: shutdowntest Shutting down: 6 more sleeps
00:57:15 shutdowntest.sh[1980]: shutdowntest Shutting down: 5 more sleeps
00:57:16 shutdowntest.sh[1980]: shutdowntest Shutting down: 4 more sleeps
00:57:17 shutdowntest.sh[1980]: shutdowntest Shutting down: 3 more sleeps
00:57:18 shutdowntest.sh[1980]: shutdowntest Shutting down: 2 more sleeps
00:57:19 shutdowntest.sh[1980]: shutdowntest Shutting down: 1 more sleeps
00:57:20 shutdowntest.sh[1980]: shutdowntest Finished shutting down; quitting
00:57:20 systemd[1]: Stopped shutdowntest.service.
그러나 본인 sudo reboot
이나 sudo shutdown now
기계가 정상적으로 종료 할 시간이 없으면 서비스가 종료되고 / var / log / syslog는 1 초 후에 종료됩니다.
00:59:30 shutdowntest.sh[2014]: Terminated
00:59:30 shutdowntest.sh[2014]: shutdowntest received signal SIGTERM
00:59:30 shutdowntest.sh[2014]: shutdowntest Shutting down: 10 more sleeps
00:59:30 systemd[1]: Stopping shutdowntest.service...
머신을 종료하거나 재부팅 할 때 서비스 에 종료 시간 ( TimeoutSec
또는 TimeoutStopSec
) 이 부여되도록하는 방법
journalctl -u shutdowntest.service
직접 보지 않고 저널 ( ) 에서 확인할 수 있습니까/var/log/syslog
? 시스템 로그는 서비스 전에 중지하지 후 출력의 나머지 로그인되어 있지 않은 경우 궁금하네요