本文译者是一位开源理念的坚定支持者,所以本文虽然不是软件,但是遵照开源的精神发布。
本文译者十分愿意与他人分享劳动成果,如果你对我的其他翻译作品或者技术文章有兴趣,可以在如下位置查看现有的作品集:
由于译者水平有限,因此不能保证译文内容准确无误。如果你发现了译文中的错误(哪怕是错别字也好),请来信指出,任何提高译文质量的建议我都将虚心接纳。
systemd-halt.service, systemd-poweroff.service, systemd-reboot.service, systemd-kexec.service, systemd-shutdown — 系统关闭逻辑
systemd-halt.service
systemd-poweroff.service
systemd-reboot.service
systemd-kexec.service
/usr/lib/systemd/systemd-shutdown
/usr/lib/systemd/system-shutdown/
systemd-halt.service
是一个
包含在 halt.target
中的系统服务,
负责执行实际的关机动作。类似的,
systemd-poweroff.service
包含在
poweroff.target
中、
systemd-reboot.service
包含在
reboot.target
中、
systemd-kexec.service
包含在
kexec.target
中,
分别负责执行对应的实际操作。
这些服务在运行时会确保 PID=1 的进程
已经被负责实际关机动作的
/usr/lib/systemd/systemd-shutdown
工具所替换。
在关机前,
此工具将会卸载所有文件系统、
卸载交换设备、卸载所有存储设备、
杀死所有进程。
将关机动作交给一个单独的二进制程序是必要的, 否则系统更新之后的重启动作可能会失败, 因为运行中的 PID=1 进程可能仍然依赖于已经消失的库文件, 这将会导致文件系统处于忙碌状态, 从而无法重新挂载为只读模式。
在实际执行 halt/poweroff/reboot/kexec 动作之前,
systemd-shutdown
将会运行
/usr/lib/systemd/system-shutdown/
目录中的所有可执行文件,
并根据所要执行的动作,向这些可执行文件传递 "halt
",
"poweroff
", "reboot
",
"kexec
" 参数。
目录中的所有可执行文件都以并行的方式被同时调用,
并仅在所有这些可执行文件退出之后,
systemd-shutdown
才会真正实际执行 halt/poweroff/reboot/kexec 动作。
注意,千万不要直接执行 systemd-halt.service
及其相关单元。
而是应该使用例如
"systemctl halt
"
这样的命令来关机。