曾经有一个很有意思的段子,说一个程序员在自己的简历上写到:"熟练掌握 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
立即关机,不会有任何的广播消息;
halt
和 poweroff
命令也可以实现 shutdown -h now
类似的立即关机效果,但是有说法称 halt
和 poweroff
命令都是不太安全的(所谓不安全就是不能正确的在关闭系统进程的时候将数据保存),因此关机常用的是 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 系统,且也是安全的命令。