조건부로 시스템 재시작 시간 초과 연장

조건부로 시스템 재시작 시간 초과 연장

핵심요약: 특정 민감한 프로세스가 작업을 완료할 때까지 요청된 재시작을 연기하는 메커니즘을 구축하려고 합니다.


systemd에는 reboot.target기본값 JobTimeoutSec=30min및 가 있습니다 JobTimeoutAction=force-reboot.

ExecStop중단 없이 완료할 수 있어야 하는 작업이 있습니다 . 따라서 서비스에는 TimeoutStopSec=infinity; 이 중지 작업이 on 의 디스패치를 ​​차단하는 경우 reboot.target중지 작업이 계속 실행 중이더라도 결국 강제로 다시 시작됩니다 JobTimeout.reboot.target


reboot.target이 문제를 해결하려는 현재 시도는 기본값을 JobTimeoutAction=force-reboot로 대체하고 다음과 같은 이벤트를 JobTimeoutAction=exit추가 하는 오버레이를 구축하는 것입니다 .OnFailure

# /etc/systemd/system/reboot.target.d/defer-if-critical-job-running.conf
[Unit]
JobTimeoutAction=exit
FailureActionExitStatus=1
OnFailure=reboot-now-unless-critical-job-is-running.service
# /etc/systemd/system/reboot-now-unless-critical-job-is-running.service
[Unit]
Description=Reboot unless a critical job is running
DefaultDependencies=no

[Service]
ExecStart=/bin/sh -c 'if systemctl is-active some-critical-job.service; then systemctl reboot; else systemctl reboot --force; fi'

그러나 이것은 실제로 작동하지 않습니다. JobTimeouton에 도달하면 즉시 강제로 다시 시작됩니다.reboot.target

재시작을 무기한 연기하려면 어떻게 해야 합니까?오직특정 중요한 작업이 실행 중일 때?

관련 정보