`systemctl start restart.target` 和 `systemctl restart` 之间有什么实际区别?

`systemctl start restart.target` 和 `systemctl restart` 之间有什么实际区别?

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 rebootreboot.targetctrl-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... 和Conflictwith shutdown.target

如果你跑systemctl start reboot.target然后立即systemctl start suspend.target,你的钩子装置似乎就会停止shutdown.target。现在systemd-reboot.serviceRequires=shutdown.target,所以也应该停止/取消。 (umount.target不应取消)。

我已经验证了这些方面的行为差异,并且将其报告为 systemd 问题跟踪器中的缺陷

相关内容