systemctlはシステムのシャットダウンをどのようにスケジュールしますか?


12

「」と入力するとshutdown -h +30、Linuxは何とかランレベルの変更を30分以内にスケジュールします。Debianでは、/sbin/shutdownへのシンボリックリンク/bin/systemctlです。私のテストでは、shutdowncron タイマーsystemdタイマーも使用していませ

システムのシャットダウンはどのように実装されていsystemdますか?

回答:


11

良い質問。シャットダウンのスケジュールを設定し、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);

systemctl.c 7387行目

したがって、シャットダウンはによって処理されるように見えlogindます。必要に応じて、引き続き詳細を追跡できますlogin-dbus.c。シャットダウンをスケジュール、キャンセル、管理するためのメソッドがあります。しかし、より深い理解のために、私よりもlogind / systemdについてもっと知る必要があるかもしれません。

簡単に言えば、シャットダウン情報は(少なくとも)のスケジュールファイルに保存されます。/run/systemd/shutdown/scheduled例として、私のコンテンツは次のとおりです。

USEC=1435715559055789
WARN_WALL=1
MODE=poweroff

時間の表示(おそらくマイクロ秒単位); を介して警告するかどうかwall、およびどのモードか(cf restart、kexecなど)。

これが少なくともあなたを正しい方向に向けることを願っています!

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.