![现在,systemd 给出了答案。](https://linux22.com/image/143789/%E7%8E%B0%E5%9C%A8%EF%BC%8Csystemd%20%E7%BB%99%E5%87%BA%E4%BA%86%E7%AD%94%E6%A1%88%E3%80%82.png)
at 18:00 shutdown now
并且shutdown 18:00
,他们正在启动相同的服务吗?它们的工作方式相同吗?
答案1
at 18:00 shutdown now
at
创建一个“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 的后续次要版本),而不是子系统at
。 systemctl
与(系统范围的)桌面总线代理讲一个内部协议,该代理又与logind
.
因此,就像本at
例一样,没有任何shutdown
进程坐在那里倒计时并生成wall
消息。因此,可以注销,这不会影响日程安排,并且取消并不像仅仅中断/终止登录会话的前台进程那么简单。就像与at
.
那里仍消息,与本at
例不同,但它们是由 发出的logind
。与此情况不同的是at
,计划的作业不会在系统重新启动后持续存在,因此实际关闭会取消计划的作业。那里是文件系统中的一个文件,但其下/run/systemd/shutdown
是非持久存储。
进一步的区别在于,只能有一一次计划关闭,而一个人可以提交多个at
作业,并且策略工具包将应用规则shutdown
在非登录会话上下文中作为at
作业运行,该作业与应用于的规则不同shutdown
作业,该规则与在登录会话上下文中。后者可能更加宽容,允许(比如说)无特权的登录到活动登录会话以关闭系统的用户。