Linux关机和重启shutdown、reboot命令

曾经有一个很有意思的段子,说一个程序员在自己的简历上写到:"熟练掌握 Linux 的开关机和重启",开机操作任何系统都不难,硬件肯定要给予一个开机的按钮,至于 Linux 的关机和重启,在没有桌面环境的 Linux 下还真需要记住命令才能实现。当然,真正的 Linux 服务器环境,几乎可以做到全年不关机不重启,除非机房断电了,一般情况下,Linux服务器遇上问题,通过重启相关服务进程或执行相关命令回收资源就可以恢复运行,关机、重启对 Linux 操作系统来说是比较暴力的方式,不够优雅,我学习关机和重启命令只为在自己的Linux开发电脑上使用,真正的生产环境服务器,关机和重启操作有专门的运维工程师负责。

sync 命令

sync 命令用于及时将系统内存的数据写到磁盘,在执行关机和重启操作前,都建议手动先执行一次 sync 命令,主要原因在于,程序执行的时候,cpu的运算速度远超磁盘io的速度,因此很多数据是先缓存到内存,之后再写入磁盘,手动执行 sync 命令可以防止数据丢失。

命令路径: /bin/sync,所有用户都有执行 sync 命令的权限。

shutdown 命令

在 Linux 系统中, shutdown 命令既可以用来操作关机也可以用来操作重启,比较常用 shutdown 命令来执行关机操作,重启一般大家更喜欢用简单的 reboot 命令。

除了最基本的关机和重启功能,shutdown 命令还具备如下的功能:

  • 关机前,可以设置关机消息传送给在线的用户,防止多用户在线影响到其他用户;
  • 对在线的用户发送警告,并禁止其他用户登录,但是实际不是真的关机,只是为了避免多用户干扰;

命令概况

  • shutdown 命令的格式: shutdown [选项] [时间] [警告信息]
  • 命令路径:/sbin/shutdown ,这个命令需要 root 权限才能执行;
  • 常用的选项:
-h 关机后不重新启动
  -r 关机后立即重新启动
  -k 并不真正关机而只是发出警告信息给所有用户
  -f 快速关机重启动时跳过fsck
  -n 快速关机不经过 init 程序
  -c 取消一个已经运行的shutdown

示例

  • shutdown 缺省选项,默认会等待一分钟后关机,并且向在线用户广播警告信息,如下所示:
[root@localhost ~]# shutdown
# 提示将在一分钟后的这个时间执行关机,可以使用shutdown -c取消
Shutdown scheduled for Fri 2019-09-06 14:29:38 CST, use 'shutdown -c' to cancel.

#另外一个在线用户将可以接受到广播消息
[calmsnow@localhost ~]$
# 来自root的广播消息,系统将在一分钟后关闭
Broadcast message from root@localhost.localdomain (Fri 2019-09-06 14:28:38 CST):

The system is going down for power-off at Fri 2019-09-06 14:29:38 CST!
  • shutdown -h 3 3分钟后关机,并且向在线用户广播警告信息。-h 后写整数,代表过多少分钟后关机,如下所示:
[root@localhost ~]# shutdown -h 3
Shutdown scheduled for Fri 2019-09-06 14:41:24 CST, use 'shutdown -c' to cancel.

#另外一个在线用户将可以接受到广播消息
[calmsnow@localhost ~]$
Broadcast message from root@localhost.localdomain (Fri 2019-09-06 14:38:24 CST):

The system is going down for power-off at Fri 2019-09-06 14:41:24 CST!
  • shutdown -h now 立即关机,不会有任何的广播消息;

haltpoweroff 命令也可以实现 shutdown -h now 类似的立即关机效果,但是有说法称 haltpoweroff 命令都是不太安全的(所谓不安全就是不能正确的在关闭系统进程的时候将数据保存),因此关机常用的是 shutdown -h now

  • shutdown -r 默认会等待一分钟后重启,并且向在线用户广播警告信息,如下所示:
[root@localhost ~]# shutdown -r
Shutdown scheduled for Fri 2019-09-06 14:53:26 CST, use 'shutdown -c' to cancel.

#另外一个在线用户将可以接受到广播消息
[calmsnow@localhost ~]$
Broadcast message from root@localhost.localdomain (Fri 2019-09-06 14:52:26 CST):

The system is going down for reboot at Fri 2019-09-06 14:53:26 CST!
  • shutdown -r 3 3分钟后重启,并且向在线用户广播警告信息。-r 后写整数,代表过多少分钟后重启:
[root@localhost ~]# shutdown -r 3
Shutdown scheduled for Fri 2019-09-06 15:00:15 CST, use 'shutdown -c' to cancel.

#另外一个在线用户将可以接受到广播消息
[calmsnow@localhost ~]$
Broadcast message from root@localhost.localdomain (Fri 2019-09-06 14:57:15 CST):

The system is going down for reboot at Fri 2019-09-06 15:00:15 CST!
  • shutdown -r now 立即重启,不会有任何的广播消息;

重启一般大家更喜欢用简单的 reboot 命令,可以认为 reboot 命令几乎是等价于 shutdown -r now,都是安全的命令。

reboot 命令

reboot 命令可以认为几乎是等价于 shutdown -r now,用于重启 Linux 系统,且也是安全的命令。