现在,systemd 给出了答案。

现在,systemd 给出了答案。

at 18:00 shutdown now并且shutdown 18:00,他们正在启动相同的服务吗?它们的工作方式相同吗?

答案1

at 18:00 shutdown nowat创建一个“at”作业,该作业由守护程序或守护程序在指定时间执行cron,具体取决于您的系统。

shutdown 18:00在 shell 中启动一个进程,等待指定时间,然后执行关闭。如果您的 shell 会话终止,则可以终止此命令。

大多数情况下的最终结果是相同的:系统在 18:00 关闭。

一个区别是,如果您使用at,作业将被存储,并且如果系统在 18:00 之前通过其他方式关闭,则再次启动时作业仍将等待运行;如果时间已经过去,将立即执行关闭,这可能是非常意外的。

另一个区别是,shutdown 18:00会在预定时间前 5 分钟创建一个/run/nologin文件,以防止人们在那之后登录。此外,还将发送广播消息来警告登录用户系统即将关闭。

您需要考虑这些差异来决定使用哪个。

答案2

现在,systemd 给出了答案。

如果你有 CentOS 7,你有一个 systemd 操作系统,答案是不同的。

at 18:00 shutdown now仍然通过at子系统进行调度,但是该shutdown命令以及您直接使用 调用的命令shutdown 18:00是不同的。它实际上是systemd的systemctl程序。 systemctl做事方式不同。

首先,systemctl发送预定的关闭请求以由守护进程处理,与本at例非常相似。不过,具体而言,这是一个 systemd 守护进程logind(该systemd-shutdownd守护进程已于 2015 年 5 月从 systemd 中删除,此更改已渗透到 CentOS 7 的后续次要版本),而不是子系统atsystemctl与(系统范围的)桌面总线代理讲一个内部协议,该代理又与logind.

因此,就像本at例一样,没有任何shutdown进程坐在那里倒计时并生成wall消息。因此,可以注销,这不会影响日程安排,并且取消并不像仅仅中断/终止登录会话的前台进程那么简单。就像与at.

那里消息,与本at例不同,但它们是由 发出的logind。与此情况不同的是at,计划的作业不会在系统重新启动后持续存在,因此实际关闭会取消计划的作业。那里文件系统中的一个文件,但其下/run/systemd/shutdown是非持久存储。

进一步的区别在于,只能有一次计划关闭,而一个人可以提交多个at作业,并且策略工具包将应用规则shutdown在非登录会话上下文中作为at作业运行,该作业与应用于的规则不同shutdown作业,该规则与在登录会话上下文中。后者可能更加宽容,允许(比如说)无特权的登录到活动登录会话以关闭系统的用户。

进一步阅读

相关内容