shutdown -h +30
と入力すると、Linuxはどういうわけかランレベルの変更を30分以内にスケジュールします。 Debianでは、/sbin/shutdown
は/bin/systemctl
へのシンボリックリンクです。私のテストでは、 shutdown
はnotは cron も-も使用しないことが示されています systemdタイマー 。
システムのシャットダウンはsystemd
によってどのように実装されますか?
良い質問。私はあなたが試したに違いないことに気付いたものを試しました-シャットダウンをスケジュールし、systemdタイマーを照会します!
あなたが指摘したように、それはシャットダウンがsystemdタイマーになかったことを示しました。したがって、systemctlソースをざっと見ると、halt_main()
の一部としてこの呼び出しが得られます。
r = sd_bus_call_method(
b,
"org.freedesktop.login1",
"/org/freedesktop/login1",
"org.freedesktop.login1.Manager",
"ScheduleShutdown",
&error,
NULL,
"st",
arg_action == ACTION_HALT ? "halt" :
arg_action == ACTION_POWEROFF ? "poweroff" :
arg_action == ACTION_KEXEC ? "kexec" :
"reboot",
arg_when);
したがって、シャットダウンは logind
によって処理されるように見えます。必要に応じて、詳細を引き続き追求できます login-dbus.c
を参照してください。シャットダウンのスケジューリング、キャンセル、管理のための方法があります。しかし、より深く理解するために、私よりもlogind/systemdについてもっと知る必要があるかもしれません。
簡単に言うと、シャットダウン情報は(少なくとも)/run/systemd/shutdown/scheduled
のスケジュールファイルに保存されます。例として、私の内容は次のとおりです。
USEC=1435715559055789
WARN_WALL=1
MODE=poweroff
時間の表示(おそらくマイクロ秒単位)。 wall
を介して警告するかどうか、およびどのモード(restart、kexecなどを参照)。
これが少なくともあなたを正しい方向に向けることを願っています!