关闭18:00和在18:00关闭有什么区别?


30

at 18:00 shutdown nowshutdown 18:00,他们是否启动了相同的服务?它们是否以相同的方式工作?

Answers:


48

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

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

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

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

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

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


1
shutdown 18:00在您的shell中启动一个等待的进程”。如果在此之前注销该怎么办?
罗恩·约翰(RonJohn)

1
@RonJohn:这取决于您是否使用nohup或以disown其他方式,如果注销通常会杀死正在运行的后台进程。不同的系统为此可能具有不同的默认值。(我假设确实有一个sudo shutdown进程仍在运行,而只是发出init启动关闭计时器的信号。后者实际上可能是发生了什么,但是我最近没有检查过。哦,但是@JdeBP有;请参见答案)
彼得·科德斯

是否真的可以进行设置,at使其通过cron代替atd
terdon

3
有一个钻石主持人,他还没有阅读过《如何问》。( - :你会发现,这个问题被问四年前在unix.stackexchange.com/questions/147643
JdeBP

“还将发送广播消息,以警告登录的用户该系统即将关闭。” 我想说这是在拥有许多用户的服务器中最重要的区别,在此答案中我将重点介绍它。
JiK

23

现在,系统化的答案。

如果您使用的是CentOS 7,则您使用的是systemd操作系统,答案是不同的。

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

首先,systemctl发送调度的关闭请求以由守护进程处理,就像在这种at情况下一样。但是,具体来说,这是一个系统化的守护程序logind(该systemd-shutdownd守护程序已于2015年5月从systemd中删除,此更改自此渗透到了CentOS 7的更高次要版本中),而不是at子系统。 systemctl与(系统级)Desktop Bus代理通信的内部协议,该代理又与进行通信logind

因此,就像在这种at情况下一样,没有任何shutdown过程可以倒计时并生成wall消息。因此,可以注销,这将不会影响计划,并且取消并不像仅中断/终止登录会话的前台进程那样简单。就像at

目前仍有消息,不像在at情况下,但它们是由发行logind。同样与at情况不同,计划的作业不会在系统重新启动后持续存在,因此实际关闭会取消计划的作业。有在文件系统中的文件,但它是在/run/systemd/shutdown其非永久存储。

进一步的区别是,一次只能执行一次计划内关闭,而一次可以提交多个at作业,Policy Kit会将规则shutdown在非登录会话上下文中应用为at作业,该规则与shutdown在Windows 2000中运行的规则不同。登录会话上下文。后者可能更宽松,从而允许(例如)登录到活动登录会话的非特权用户关闭系统。

进一步阅读

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.