start reboot.target
和之间有两个已记录的差异reboot
。而是start reboot.target
由什么触发的ctrl-alt-del.target
。
ctrl-alt-del.target
省略有什么关系吗--job-mode=replace-irreversibly
?在什么情况下这会导致不同的行为?为什么它被包含在systemctl reboot
?
man systemctl
重新启动[参数]
关闭并重新启动系统。这主要相当于
start reboot.target --job-mode=replace-irreversibly
,但也会向所有用户打印一条墙消息。
man systemd.special
ctrl-alt-del.target:只要在控制台上按下 Control+Alt+Del,systemd 就会启动此目标。通常,这应该是reboot.target的别名(符号链接)。
答案1
通过阅读文件的源代码reboot.target
,我们看到它ctrl-alt-del.target
被引用Alias=
,这意味着它是同一命令的另一个名称,并且将以相同的方式工作。
查看systemctl.c的源代码,我们还看到systemctl reboot
将通过该replace-irreversibly
选项。
因此,您发现的所有三种重新启动命令的变体似乎都工作相同:systemctl reboot
、reboot.target
和ctrl-alt-del.target
。
If you have a proposal for improving the documentation, you can modify the systemd 文档的源 XML 文件并提交拉取请求。
答案2
当对新作业进行排队时,此选项控制如何处理已排队的作业。它采用“失败”、“替换”、“不可逆替换”、“隔离”、“忽略依赖性”、“忽略需求”或“刷新”之一。默认为“替换”,除非使用隔离命令(这意味着“隔离”作业模式)。
如果指定“fail”并且请求的操作与挂起的作业冲突(更具体地说:导致已挂起的启动作业反转为停止作业,反之亦然),则导致操作失败。
如果指定“替换”(默认值),则将根据需要替换任何冲突的挂起作业。
如果指定了“replace-irreversible”,则操作与“replace”类似,但也将新作业标记为不可逆。这可以防止未来冲突的事务替换这些作业(甚至在不可逆转的作业仍处于待处理状态时排队)。仍然可以使用取消命令取消不可逆转的作业。
这表明了实际效果。假设您“将单元挂钩到睡眠状态逻辑”,使用sleep.target
将它们拉入。您的挂钩单元没有DefaultDependencies=no
,因此它们依赖于sysinit.target
... 和Conflict
with shutdown.target
。
如果你跑systemctl start reboot.target
然后立即systemctl start suspend.target
,你的钩子装置似乎就会停止shutdown.target
。现在systemd-reboot.service
有Requires=shutdown.target
,所以也应该停止/取消。 (umount.target
不应取消)。
我已经验证了这些方面的行为差异,并且将其报告为 systemd 问题跟踪器中的缺陷。