「」と入力するとshutdown -h +30
、Linuxは何とかランレベルの変更を30分以内にスケジュールします。Debianでは、/sbin/shutdown
へのシンボリックリンク/bin/systemctl
です。私のテストでは、shutdown
はcron タイマーもsystemdタイマーも使用していません。
システムのシャットダウンはどのように実装されていsystemd
ますか?
「」と入力するとshutdown -h +30
、Linuxは何とかランレベルの変更を30分以内にスケジュールします。Debianでは、/sbin/shutdown
へのシンボリックリンク/bin/systemctl
です。私のテストでは、shutdown
は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
、およびどのモードか(cf restart、kexecなど)。
これが少なくともあなたを正しい方向に向けることを願っています!