重要な要約:特定の機密プロセスがタスクを完了するまで、要求された再起動を延期するメカニズムを構築しようとしています。
systemdにはreboot.target
デフォルト値JobTimeoutSec=30min
とがありますJobTimeoutAction=force-reboot
。
ExecStop
中断することなく完了できる必要がある作業があります。したがって、サービスにTimeoutStopSec=infinity
;このストップジョブがオンのディスパッチをブロックしている場合、ストップジョブがまだ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'
しかし、これは実際には機能しません。JobTimeout
オンになるとすぐに強制的に再起動します。reboot.target
再起動を無期限に延期するにはどうすればよいですか?ただ特定の重要なタスクが実行されているとき?