Linux 完全有能力在无需重启的情况下运行数周甚至数年。在某些行业,这正是 Linux 所做的,这要归功于 kpatch 和 kgraph 等技术的进步。
然而,对于笔记本电脑和台式机用户来说,这个指标有点极端。虽然这可能不是每天都会发生的情况,但至少每周都会有需要重启机器的充分理由。对于一个不需要经常重启的系统,Linux 提供了很多在需要重新启动时的选择。
了解你的选项
在继续之前,关于重启的说明。重启在每个操作系统上都是一个独特的过程。即使在 POSIX 系统中,由于不同的初始化系统或命令设计,关机和重启命令的行为也可能有所不同。
尽管有这个因素,但有两个概念至关重要。首先,重启在 POSIX 系统上很少是必要的。如果需要,你的 Linux 机器可以连续数周或数月运行而无需重启。除非软件安装程序或更新程序特别建议这样做,否则无需通过重启来“刷新”你的计算机。当然,重启也没有坏处,所以这取决于你。
其次,重启应该是一个友好的过程,允许程序退出,文件被保存,临时文件被删除,文件系统日志更新等等。在可能的情况下,使用预期的接口重启,无论是在 GUI 还是终端中。如果你强制计算机关机或重启,你可能会丢失未保存甚至最近保存的数据,甚至损坏重要的系统信息;只有在别无选择时,才应该强制关闭计算机。.
点击按钮
重启或关闭 Linux 的第一种方法是最常见的,也是大多数桌面用户最直观的方法,无论他们使用什么操作系统:它是 GUI 中的电源按钮。由于关机和重启是工作站上的常见任务,你通常可以在几个不同的地方找到电源按钮(通常带有重启和关机选项)。 在 GNOME 桌面中,它位于系统托盘中:

它也在 GNOME 的“活动”菜单中

在 KDE 桌面中,电源按钮可以在“应用程序”菜单中找到

你也可以通过右键单击桌面并选择“离开”选项来访问 KDE 电源控制,这将打开你在此处看到的窗口

其他桌面提供了这些主题的变体,但总体思路是相同的:使用鼠标找到电源按钮,然后单击它。你可能需要在重启和关机之间选择,但最终结果几乎相同:进程被优雅地停止,以便数据被保存,临时文件被删除,然后数据同步到驱动器,然后系统关机。
按下物理按钮
大多数计算机都有一个物理电源按钮。如果你按下该按钮,你的 Linux 桌面可能会显示一个电源菜单,其中包含关机或重启选项。此功能由高级配置和电源接口 (ACPI) 子系统提供,该子系统与你主板的固件通信以控制你计算机的状态。
ACPI 很重要,但它的范围有限,因此从用户的角度来看,没有太多可配置的内容。通常,ACPI 选项通常称为“电源”,并设置为合理的默认值。如果你想更改此设置,可以在系统设置中进行更改。
在 GNOME 上,打开系统托盘菜单并选择 “活动”,然后选择“设置”。接下来,选择左侧列中的“电源”类别,这将打开以下菜单

在“挂起和电源按钮”部分,选择你希望物理电源按钮执行的操作。
这个过程在不同的桌面环境中是相似的。例如,在 KDE 上,“系统设置”中的“电源管理”面板包含一个“按钮事件处理”选项。

opensource.com
在你配置按钮事件的处理方式后,按下计算机的物理电源按钮将遵循你选择的任何选项。根据你的计算机供应商(或零件供应商,如果你自己组装计算机),按钮按下可能只是轻轻一按,或者可能需要稍微长一点的按压,因此你可能需要进行一些测试才能掌握窍门。
但要注意不要按压时间过长,因为它可能会在没有警告的情况下关闭你的计算机。
运行 systemctl 命令
如果你更多地在终端而不是在 GUI 桌面中操作,你可能更喜欢使用命令重启。广义上讲,重启和关机是 init 系统的过程——在接收到电源信号(分别是开或关)后,启动或关闭计算机的程序序列。
在大多数现代 Linux 发行版中,systemd 是 init 系统,因此重启和关机都可以通过 systemd 用户界面 systemctl 执行。 systemctl 命令接受许多其他选项,包括 halt(停止磁盘活动但不切断电源)、reboot(停止磁盘活动并向主板发送复位信号)和 poweroff(停止磁盘活动,然后切断电源)。这些命令大多等同于启动同名的目标文件。
例如,要触发重启
$ sudo systemctl start reboot.target
运行 shutdown 命令
在 systemd 出现之前的传统 UNIX 中(以及对于某些 Linux 发行版,如 Slackware,现在仍然如此),有一些专门用于停止系统的命令。例如,shutdown 命令可以关闭你的机器,但它有几个选项来精确控制这意味着什么。
此命令需要一个时间参数,以分钟为单位,以便 shutdown 知道何时执行。要立即重启,请附加 -r 标志
$ sudo shutdown -r now
要立即关机
$ sudo shutdown -P now
或者你可以使用 poweroff 命令
$ poweroff
要在 10 分钟后重启
$ sudo shutdown -r 10
shutdown 命令是一种安全的关机或重启计算机的方式,允许磁盘同步和进程结束。此命令会在关机开始的最后 5 分钟内阻止新的登录,这在多用户系统上特别有用。
在今天的许多系统中,shutdown 命令实际上只是调用 systemctl 并带有适当的重启或关机选项。
运行 reboot 命令
reboot 命令本身基本上是 shutdown -r now 的快捷方式。从终端来看,这是最简单快捷的重启命令
$ sudo reboot
如果你的系统被阻止关机(可能是由于失控的进程),你可以使用 --force 标志强制系统关机。但是,此选项会跳过实际的关机过程,这对于正在运行的进程来说可能是突然的,因此只有在 shutdown 命令阻止你关机时才应使用它。
在许多系统中,reboot 实际上是调用 systemctl 并带有适当的重启或关机选项。
Init
在没有 systemd 的 Linux 发行版上,你的计算机最多可以理解 7 个运行级别。不同的发行版可以为每个模式分配唯一的含义,但通常,0 初始化为停止状态,而 6 初始化为重启(中间的数字表示诸如单用户模式、多用户模式、GUI 提示符和文本提示符等状态)。
这些模式在没有 systemd 的系统上的 /etc/inittab 中定义。在使用 systemd 作为 init 系统的发行版上,/etc/inittab 文件要么丢失,要么只是一个占位符。
telinit 命令是你 init 系统的前端。如果你正在使用 systemd,那么此命令是指向 systemctl 并带有适当选项的链接。
要通过将计算机发送到运行级别 0 来关机
$ sudo telinit 0
要使用相同的方法重启
$ sudo telinit 6
此命令对你的数据有多不安全完全取决于你的 init 配置。大多数发行版都试图通过将运行级别映射到友好的命令来保护你免受“拔电源插头”(或其数字等效物)的影响。
你可以通过读取 /etc/rc.d 或 /etc/init.d 中的 init 脚本,或者通过读取 /lib/systemd/system/ 中的 systemd 目标,亲自查看每个运行级别发生的事情。
应用蛮力
到目前为止,我已经介绍了重启或关闭 Linux 计算机的所有正确方法。为了全面起见,我在此处包含关闭 Linux 计算机的其他方法,但这些方法绝不被推荐。它们不是为日常重启或关机命令(reboot 和 shutdown 就是为此而存在的)而设计的,但它们是完成任务的有效手段。
如果你尝试这些方法,请在虚拟机中尝试。否则,仅在紧急情况下使用它们。
Proc
比 init 系统更底层的是 /proc 文件系统,它是计算机上几乎所有正在发生的事情的虚拟表示。例如,你可以将 CPU 视为文本文件(使用 cat /proc/cpuinfo),查看笔记本电脑电池剩余电量,或者,以某种方式,重启你的系统。
Linux 内核中有一个用于系统请求的规定(大多数键盘上的 Sysrq)。你可以使用组合键直接与此子系统通信,理想情况下,无论你的计算机处于何种状态;在某些键盘上,这变得很复杂,因为 Sysrq 键可能是一个特殊的功能键,需要另一个键才能访问(例如许多笔记本电脑上的 Fn 键)。
一个不太可能失败的选项是使用 echo 手动将信息插入 /proc。首先,确保 Sysrq 系统已启用
$ sudo echo 1 > /proc/sys/kernel/sysrq
要重启,你可以使用 Alt+Sysrq+B 或键入
$ sudo echo b > /proc/sysrq-trigger
这种方法不是定期重启机器的合理方式,但它可以在紧急情况下完成任务。
Sysctl
内核参数可以在运行时使用 sysctl 进行管理。有很多内核参数,你可以使用 sysctl --all 查看所有参数。在你知道要查找什么之前,大多数参数可能对你来说意义不大,在这种情况下,你要查找的是 kernel.panic。
你可以使用 --value 选项查询内核参数
$ sudo sysctl --value kernel.panic
如果你得到 0 返回,那么你正在运行的内核没有特殊设置,至少默认情况下,在内核 panic 时重启。这种情况很常见,因为在灾难性的系统崩溃时立即重启会使诊断崩溃原因变得困难。但是,无论如何都需要保持运行的系统可能会受益于内核故障后的自动重启,因此在某些情况下会启用此选项。
你可以激活此功能作为实验(如果你正在跟随操作,请在虚拟机中而不是在你的实际计算机上尝试此操作)
$ sudo sysctl kernel.reboot=1
现在,如果你的计算机遇到内核 panic,它将被设置为重启,而不是耐心等待你诊断问题。你可以通过使用 sysrq 模拟灾难性崩溃来测试这一点。首先,确保 Sysrq 已启用
$ sudo echo 1 > /proc/sys/kernel/sysrq
然后模拟内核 panic
$ sudo echo c > /proc/sysrq-trigger
你的计算机立即重启。
负责任地重启
了解所有这些选项并不意味着你应该使用所有选项。仔细考虑你想要完成什么,以及你选择的命令将做什么。你不想因为鲁莽而损坏你的系统。这就是虚拟机的用途。但是,拥有如此多的选项意味着你已准备好应对大多数情况。
我是否遗漏了你最喜欢的重启或关闭系统的方法?请在评论中列出我遗漏的内容!
12 条评论