重启或关闭 Linux 系统是诸多风险操作之一,务必慎之又慎

Linux 系统在重启或关闭之前,会通知所有已登录的用户和进程。如果在命令中加入了时间参数,系统还将拒绝新的用户登入请求

推荐阅读

下面将依次介绍以下命令

  • shutdownhaltpoweroffreboot:用于休眠、重启或关机
  • initinitialization 的简称,是系统启动的第一个进程
  • systemctlsystemd 是 Linux 系统和服务器的管理程序

shutdown 命令

shutdown命令用于重启或关闭本地/远程的 Linux 设备,并提供了多个选项。如果定义了时间参数,则系统会在关机的 5 分钟前创建/run/nologin文件,以确保后续的登录请求会被拒绝

通用语法如下:

> shutdown [OPTION] [TIME] [MESSAGE]

运行以下命令则会立即关闭 Linux 设备-h now表示立刻杀死所有进程,并关闭系统:

-h:如果不特指-halt选项,则等价于-poweroff选项

> shutdown -h now

另外我们可以使用带有-halt选项的shutdown命令立即关闭设备:

-H--halt:停止设备运行

> shutdown --halt now 
# 或者
> shutdown -H now

还可以使用带有poweroff选项的shutdown命令:

-P--poweroff:切断电源(默认)

> shutdown --poweroff now
# 或者
> shutdown -P now

如果没有使用时间选项运行以下命令,则命令会在一分钟之后执行:

[root@centos-1~] > shutdown -h
Shutdown scheduled for Mon 2018-10-08 06:42:31 EDT, use 'shutdown -c' to cancel.

[root@centos-2~] >
Broadcast message from root@centos-1 (Mon 2018-10-08 06:41:31 EDT):

The system is going down for power-off at Mon 2018-10-08 06:42:31 EDT!

若要取消关机计划,则可使用shutdown -c

[root@centos-1~] > shutdown -c
Broadcast message from root@centos-1 (Mon 2018-10-08 06:39:09 EDT):

The system shutdown has been cancelled at Mon 2018-10-08 06:40:09 EDT!

同样的,其他登录用户都能在中断中看到如下的广播消息

[root@centos-2~] >
Broadcast message from root@centos-1 (Mon 2018-10-08 06:41:35 EDT):

The system shutdown has been cancelled at Mon 2018-10-08 06:42:35 EDT!

如果想在指定时间(例如N秒)后执行重启或关机操作,则可添加时间参数,并可以为所有登录用户添加自定义广播消息。例如,我们将在五分钟后重启设备:

[root@centos-1~] > shutdown -r +5 "To activate the latest Kernel"
Shutdown scheduled for Mon 2018-10-08 07:13:16 EDT, use 'shutdown -c' to cancel.

[root@centos-2~] >
Broadcast message from root@vps.2daygeek.com (Mon 2018-10-08 07:08:16 EDT):

To activate the latest Kernel
The system is going down for reboot at Mon 2018-10-08 07:13:16 EDT!

运行以下命令则会立即杀死所有进程并重启系统

> shutdown -r now

reboot 命令

reboot命令同样可以重启或关闭本地/远程的 Linux 设备

执行不带任何参数reboot命令以重启 Linux 设备

> reboot

执行-p参数reboot命令以关闭 Linux 设备电源

-p--poweroff:调用haltpoweroff命令,切断设备电源

> reboot -p

执行-f参数reboot命令以强制重启 Linux 设备(类似按压机器上的电源键):

-f--force:立刻强制终端,切断电源或重启

> reboot -f

init 命令

init进程是 Linux 系统启动的第一个进程

它会检查/etc/inittab文件并决定 Linux 的运行级别。同时,允许用户在 Linux 设备上执行关机或重启操作。级别范围为0~6,共七个运行等级。

推荐阅读如何检查 Linux 上所有运行的服务 | 2daygeek

执行以下命令关闭系统

0:停机 - 关闭系统

> init 0

执行以下命令重启设备

6:重启 - 重启设备

> init 6

halt 命令

halt命令用来切断电源关闭本地/远程 Linux 设备。它会中断所有进程关闭 CPU

> halt

poweroff 命令

poweroff命令同样用来切断电源关闭本地/远程 Linux 设备poweroff很像halt,但不同的是它可以关闭设备硬件poweroff会给主板发送 ACPI 指令,主板再将信号发送给电源并切断电源:

> poweroff

systemctl 命令

systemd 是一款适用于所有主流 Linux 发行版全新 init 系统系统管理器,它是内核启动的第一个进程,并持有序号为1的进程 PID

推荐阅读chkservice – 一款终端下系统单元管理工具 | 2daygeek

systemd一切进程的父进程Fedora 15 是第一个适配安装 systemd(替代 upstart)的 Linux 发行版。

systemctl是命令行下管理 systemd 守护进程和服务的主要工具。常用命令包括:startrestartstopenabledisablereloadstatus

systemd 使用.service文件而不是 SysV init 使用的 bash 脚本。systemd 将所有守护进程归于自身的 Linux cgroups 用户组下,可以浏览/cgroup/systemd文件查看该系统的层次等级。

> systemctl halt
> systemctl poweroff
> systemctl reboot
> systemctl suspend
> systemctl hibernate

参考文章

  1. 重启和关闭 Linux 系统的 6 个终端命令 | Linux 中国
  2. 6 Commands To Shutdown And Reboot The Linux System From Terminal | 2daygeek
  3. 查看系统/服务器正常运行时间的 11 个方法 | 2daygeek
  4. Tuptime 一款为 Linux 系统保存历史记录、统计运行时间工具 | 2daygeek
  5. 如何检查 Linux 上所有运行的服务 | 2daygeek
  6. chkservice – 一款终端下系统单元管理工具 | 2daygeek