听说,有个同事因为关闭服务器被打进 ICU ……

简介: 对于 Linux 电脑,正常情况下你是如何关机的?

1. 关机命令知多少

对于 Linux 电脑,正常情况下你是如何关机的?想必大家应该都是类似这样操作:

微信图片_20220413181855.gif

但是,对于很多服务器,它们并没有 GUI 界面,或者很多服务器我们是通过 SSH 来远程操作,那么我们只能通过命令行来进行关机。Linux 和类Unix 系统(如macOS)都为大家提供了几个命令来从命令行关闭或重启系统,一般有下几个命令:

  • shutdown
  • halt
  • reboot
  • poweroff

这些命令从汉语字面意义来看,多少有些相似,可能会让人觉得困惑。但是如果使用一些相应的选项,所有这些命令都可以执行关机、重启和挂起等操作。但实际上,你用 man 命令来查看这几个命令的用法,出来的结果都是一样的,如下图所示。

微信图片_20220413181901.png

为什么会是这样的情况呢?我们要从这几个命令的渊源说起。

2. 深挖关机命令历史

为什么那几个关机命令的 man page 都一样?其实原因很简单,就是因为 Systemd 系统取代了古老的 system v init 系统。在 Linux 世界中,Fedora 在 2011 年开始使用 init 引导程序,从那以后许多发行版开始纷纷效仿。

但是,Debian 和 Ubuntu 于 2015 年开始切换到 Systemd 引导程序。

在基于 Systemd 的发行版上,shutdown、reboot、halt 和 poweroff 命令实际上都是指向 systemctl 命令的快捷方式。为了保持与基于 system v init 的发行版的兼容性,Systemd 系统保留了这些命令。

3. 关机命令使用详解

一台服务器通常会有多人一起使用,所以如果需要关闭或重启的话,我们需要提前做好计划,否则擅自关机的话会分分钟被同事打进 ICU 。

接下来,我们来重点讲解 shutdown 命令的用法。

所以,为了避免被揍,我们需要在关机之前告知所有已经登录的用户,提醒他们做好保存的工作。比如,我们打算从现在开始 15 分钟后关闭系统,需要键入如下命令:

$ shutdown +15 Shutting down in 15 minutes!

微信图片_20220413181905.png

其中,+15 表示从现在起 15 分钟后,这里 + 号是可选的。而在 +15 之后跟的那串信息就是会通知到所有已经登录系统的用户的信息。

所以,当以上命令执行之后,所有已经登录系统的用户都会收到 Shutting down in 15 minutes! 这条信息,并且 15 分钟后系统将关闭。

微信图片_20220413181908.png

如果我们要取消关闭,可以使用 -c 选项。

$ shutdown -c

微信图片_20220413181911.png

同样地,所有已登录的用户都会收到一条 The system shutdown has been cancelled 的通知。

微信图片_20220413181914.png

如果我们在 shutdown 命令之后不跟任何参数,那么默认就是在 1 分钟后关机。同时,这样操作不会通知在线的用户。所以,这样做很危险,一定要慎重。

$ shutdown

微信图片_20220413181918.png

如果我们甚至连一分钟都等不了,那么我们可以在 shutdown 后面跟上 now,代表关闭立即生效。使用 now 就等同于使用了 +0 参数。

微信图片_20220413181922.png

另外,时间参数也可以是我们期望关机的具体时间,例如 23:00 。但它必须遵循 HH:MM 的格式,并且必须是 24 小时式。执行这条命令后,在系统关闭的前 5 分钟,新的登录将被阻止。

微信图片_20220413181926.png

默认情况下 shutdown 命令会使计算机进入挂起状态,然后进入关机状态。但是,我们可以使用其它选项来改变这个默认操作:

  • -H (停止),将我们的计算机进入挂起状态,但不会要求硬件断电。
  • -P (关机)是默认操作,将计算机切换到挂起状态,然后关闭电源。
  • -r (重新启动),将我们的计算机进入挂起状态,然后重新启动。
  • -h (挂起并关机)与 -P 一样,如果同时使用-h和-H,则优先使用-H选项
  • -c (取消)该选项将取消任何定时关机,挂起或重启。

比如下面这个重启的例子:

$ shutdown -r 08:20 System rebooting at 08:20

微信图片_20220413181930.png

目录
相关文章
|
6月前
|
存储 关系型数据库 MySQL
4天4夜渡劫成功,解决10月1项目上线遇到的一个Mysql大坑,导致项目无法正常访问
4天4夜渡劫成功,解决10月1项目上线遇到的一个Mysql大坑,导致项目无法正常访问
66 0
4天4夜渡劫成功,解决10月1项目上线遇到的一个Mysql大坑,导致项目无法正常访问
|
安全 Linux 网络安全
害怕Linux SSH不安全?这几个小妙招安排上!
害怕Linux SSH不安全?这几个小妙招安排上!
253 0
害怕Linux SSH不安全?这几个小妙招安排上!
|
缓存 运维 监控
你在服务器上的一举一动,我可都看着!linux超骚技巧三分钟Get
你在服务器上的一举一动,我可都看着!linux超骚技巧三分钟Get
你在服务器上的一举一动,我可都看着!linux超骚技巧三分钟Get
|
前端开发 架构师 安全
听说你在生产环境下还没关闭Swagger2,算你猛
Swagger用于开发期间前端和后端API上的交流使用,请注意是开发期间也就是开发环境,测试环境也可以使用,但是生产环境就不需要使用了,因为生产环境前端已经和后端打通了就不需要在使用Swagger了,如果生产环境没有关闭Swagger有啥后果?
|
移动开发 JavaScript 物联网
不装了、摊牌了,我们要搞事情
不装了、摊牌了,我们要搞事情
不装了、摊牌了,我们要搞事情
|
开发工具 git Python
有了它,Python编码再也不为字符集问题而发愁了!
不论是什么编程语言,都免不了涉及到字符集的问题,我们经常在读写本文、获取网页数据等等各类情景下,需要和字符集编码打交道。这几天在公司就遇到了这么一个问题,由于软件需要初始化许多参数信息,所以使用ConfigParser模块进行配置文件的读写操作。本来一切OK,但当把这些.ini配置文件提交到git仓库后,再次下载使用时,默认的utf-8字符集编码,被git默认修改成了gbk编码。导致读取配置文件时默认使用的utf-8编码,最终导致异常报错。那么该如何解决读取文件时的字符集问题呢?Python有专门的字符集检测模块chardet,今天就带大家一起学习下它。
192 0
|
缓存 Linux 数据库
Linux安装软件时90%的人会遇到这个报错,如何解决?
Linux安装软件时90%的人会遇到这个报错,如何解决?
172 0
Linux安装软件时90%的人会遇到这个报错,如何解决?
|
SQL 存储 安全
有了这 4 款工具,老板再也不怕我写烂SQL了 良许Linux 2020-04-13 07:33
对于正在运行的mysql 性能如何?参数设置的是否合理?账号设置的是否存在安全隐患? 是否了然于胸? 俗话说工欲善其事,必先利其器,定期对你的MYSQL数据库进行一个体检,是保证数据库安全运行的重要手段。
119 0
有了这 4 款工具,老板再也不怕我写烂SQL了 良许Linux 2020-04-13 07:33
|
监控 Unix Linux
8 个出没在 Linux 终端的诡异家伙
这篇文章,我们一起来到 Linux 的诡异的一面…… 你知道吗?在我们日常使用的 Unix(和 Linux )及其各种各样的分支系统中,存在着一些诡异的命令或进程,它们让人毛骨悚然,有些确实是有害,但也有些却是有益的。下面就来简单介绍一下这些家伙吧。
124 0
8 个出没在 Linux 终端的诡异家伙