当我输入时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
?
Answers:
好问题。我尝试了一下,现在我意识到您必须尝试过-安排关机并查询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
。有一些用于计划,取消和管理关机的方法。但是,为了更深入地了解,您可能需要比我更了解登录/系统。
长话短说,关机信息(至少)存储在的计划文件中/run/systemd/shutdown/scheduled
,例如,我的内容是:
USEC=1435715559055789
WARN_WALL=1
MODE=poweroff
指示时间(以微秒为单位);是否通过发出警告wall
,以及使用哪种模式(例如重启,kexec等)。
希望这至少能为您指明正确的方向!