谈一谈关机/重启
有什么好讲的?
前言:Windows
最熟悉的 Windows 系统关机相信没人不会,直接“开始”->“关机键”,甚至很多暴躁老哥,都是直接关掉电源开关,有时候还会遇到长按开关进行强制关机。你是属于哪一种呢?这种对 Windows 系统的影响貌似不是很大,是因为 Windows (非 NT 内核)系统中,
1、是单人假多任务的情况,即使你关闭了计算机,对其他人也不产生影响(即同一时间只有一个用户可以操作)。
2、大部分情况是个人 PC 使用,没有那么多重要的数据需要同步写入磁盘,就算真的因为关机不当而损坏,大不了重装嘛。
但在Linux系统的服务器上要十分注重正确关机!
Linux 的系统特性以及关机不当的潜在危害
跟 Windows 不同,Linux 是多用户多任务的系统,每个程序(服务)都是在独立的 terminal 背景下执行,服务器背后可能有相当多的人同时在作业,如果关机不当会导致其他用户正在进行的服务中断。此外,最大的问题是,可能造成文件系统的损坏、重要数据的丢失(因为来不及将数据回写到文件中,所以有些服务的文件会有问题!)从而造成重大瘫痪和损失。
谈一谈与关机/重启相关的指令及用法
- sync :强制将数据(被改变的内容)同步写入磁盘指令
- shutdown :惯用的关机指令
- reboot :惯用的重启指令
halt, poweroff :其他相关指令(凭个人喜好)
sync: 将数据同步写入磁盘指令
在计算机中所有的数据都要被读入内存后才能被 CPU 处理,但是数据又常常需要写回磁盘(存储、日志)。
在 Linux/Unix 系统中,在文件或数据处理过程中一般先放到内存缓冲区中,等到适当的时候再写入磁盘,以提高系统的运行效率。
这个指令它其实是系统周期性做的,一般情况下无需手动执行。但万一系统因为某些特殊情况(停电、直接拔电源)造成不正常关机。由于缓存中的数据尚未被写入磁盘当中,就造成了“丢数据”,所以进行正确的关机/重启操作在企业生产中就显得尤为重要。目前,shutdown/reboot/halt 等命令均会在关机前调用 sync 来进行强制写入同步。
Tips:执行 sync 在不同用户下,root 是同步整个系统,普通用户仅能更新自己的数据。shutdown:惯用的关机指令
对于 Linux 来说,关机是个大事,因此在 SSH 服务连接时,只有 root 用户有权力掌控,而在实体物理机连接终端时,任何身份都能够使其关机。其他就不讲了,直接看用法。
[root@study ~]# /sbin/shutdown [-krhc] [时间] [警告讯息]
选项与参数:
-k : 不要真的关机,只是发送警告讯息出去!
-r : 在将系统的服务停掉之后就重新开机(常用)
-h : 将系统的服务停掉后,立即关机。 (常用)
-c : 取消已经在进行的 shutdown 指令内容。
时间 : 指定系统关机的时间!时间的范例下面会说明。若没有这个项目,则默认1分钟后自动进行。
常用的几个命令:
shutdown
:1分钟后自动关机shutdown -h now
:立刻关机shutdown -h +10 'message'
:十分钟后关机,且可以发送一条 message 给所有在线使用者shutdown -h 20:25
:系统在今天的 20:25 分会关机,若在21:25才下达此指令,则隔天才关机shutdown -r now
:立刻重启shutdown -k now 'This system will reboot'
:仅发出告警信息,假性关机shutdown -c
:取消所有关机/重启的任务reboot:惯用重启指令
[root@study ~]# reboot
这时电脑就直接重启了
[root@study ~]# reboot -f (知道就好)
本人还加过一个参数 -f,是强制重启的意思,这个是不好的方式,不要使用,因为会跳过sync而直接去重启,可能会导致丢数据
[root@study ~]# sync; sync; sync; reboot
是建议的一种理想的重启方式,图一个心安
还有两个指令 halt, poweroff也能实现关机或重启。其实 reboot, halt, poweroff 调用的函数库差不多,就包括 shutdown 都是 systemctl 管理工具下的一员。
[root@study ~]# systemctl [指令]
指令项目包括如下:
halt 进入系统停止的模式,屏幕可能会保留一些讯息,这与你的电源管理模式有关
poweroff 进入系统关机模式,直接关机没有提供电力喔!
reboot 直接重新开机
suspend 进入休眠模式
[root@study ~]# systemctl reboot # 系统重新开机
[root@study ~]# systemctl poweroff # 系统关机
还有一个旧时代的产物—— init 指令,切换不同执行等级(0-6),其中 init 0是关机 init 6是重启等。不过在 systemd 取代 systemV 作为系统管理工具后,init 目前只是一个相容模式而已,还能这么用,只是跟所谓的“执行等级”无关了。
总结
正确的关机对Linux来说真的很重要!
重启用 :reboot
关机用 :shutdown -h now
/ poweroff
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。