一、命令简介
shutdown
命令用于安全地关闭或重启系统。它可以通知用户关机时间,确保所有进程正常结束,同步文件系统,并执行关机前需要执行的脚本。
shutdown 关机过程
- 通知用户:
shutdown
命令会通知所有登录的用户系统即将关机,并显示倒计时。 - 终止进程:
shutdown
会向所有进程发送终止信号(通常是 SIGTERM),请求它们正常终止。大多数进程在收到这个信号后都会开始清理并退出。 - 等待进程终止:
shutdown
命令会等待所有进程优雅地终止。如果设置了超时时间,并且在超时后仍有进程未终止,shutdown
会强制结束这些进程(通过发送 SIGKILL 信号)。 - 执行关机脚本:
shutdown
会执行/etc/rc0.d/
目录下的所有脚本,这些脚本是用来在关机时停止服务的。脚本名称以K
开头,表示它们是在关机时(shutdown)执行的。 - 同步文件系统:
shutdown
会调用sync
命令,确保所有未写入磁盘的数据都被写入,以防止数据丢失。 - 卸载文件系统:系统会卸载所有已挂载的文件系统,确保文件系统的一致性。
- 停止内核:最后,
shutdown
会停止内核,关闭系统。
二、命令参数
shutdown
命令的基本语法如下:
shutdown [选项] [时间] [消息]
选项
-
-r
:重启系统。 -
-h
:关机。 -
-c
:取消已经计划的关机。 -
-k
:只是发送警告信息,不会真的关机或重启。 -
-t
:设置在关机或重启之前等待的时间(秒)。
时间
时间参数指定了 shutdown
命令何时执行关机或重启操作。它可以是以下形式之一:
-
now
:立即执行。 -
+m
:m 分钟后执行。 -
hh:mm
:在指定的时间(24 小时制)执行。
消息
消息参数是可选的,用于指定发送给所有登录用户的消息内容。
三、命令示例
添加关机任务
关机使用 -r
选项,-r
可以不写。
shutdown #默认一分钟后关机
shutdown -h now #立刻关机
shutdown now #立刻关机
shutdown -h 22:00 #定时关机
shutdown 22:00 #定时关机
shutdown -h +5 #倒计时关机
shutdown +5 #倒计时关机
添加重启任务
重启使用 -r
选项,语法与关机相同
shutdown -r +5
查看任务
系统的关机、重启任务存放在 /run/systemd/shutdown/scheduled
,USEC
时间戳去掉最后 6 位,可以还原得到执行任务的时间。
#命令:关机任务
sudo shutdown -h 22:00
#输出
Shutdown scheduled for 五 2024-06-14 22:00:00 CST, use 'shutdown -c' to cancel.
#命令:查看任务
cat /run/systemd/shutdown/scheduled
#输出
USEC=1718373600000000
WARN_WALL=1
MODE=poweroff
#命令:时间戳转换为日期格式
date -d @1718373600
#输出
2024年 06月 14日 星期五 22:00:00 CST
取消已经计划的关机
设置任务需要 sudo 权限,而取消任务则不需要权限。
shutdown -c
发送警告信息,但不执行关机
shutdown -k 10 "系统将在10分钟后进行维护,请保存您的工作并注销"
-
centos7 会给所有用户发消息,每分钟发一次,直到关机。
-
ubuntu22 没有反应,所有用户没有接收到消息。