首页 > Sysadmin > 正文

Linux 命令行停止服务器:shutdown、systemctl 与远程关闭

huyuanwen 2026-11-02 Sysadmin

shutdown 支持计划关机和取消,systemctl poweroff/reboot/halt 即停即走;远程 SSH 执行一样。以下均经 WSL2 实测。

草稿待审 — WSL2 中 systemctl poweroff 未实际执行,终止实例的风险基于文档和命令结构推断。

一、TL;DR:按场景选命令

  • 计划关机并通知在线用户:shutdown +10 "维护",10 分钟后自动关机。
  • 立即关机:systemctl poweroff,无延迟,等所有进程退出后断电。
  • 立即重启:systemctl reboot。
  • 仅停机不断电:systemctl halt。
  • 远程操作:SSH 登录后执行上述任意一条,效果等同于本地。

二、shutdown:计划关机首选

shutdown +10 "系统维护"
shutdown --poweroff now
shutdown --halt +5
shutdown -c

shutdown 接受时间参数:hh:mm(24 小时制)或 +m(m 分钟后),now 即 +0 立即执行。默认 +1 分钟;不指定时间且不带 -k 时,5 分钟后会写入 /run/nologin 阻止新登录 [1]。附加的字符串会通过 wall 广播给所有在线用户。

-k 选项只发警告、不真的关机,适合测试通知逻辑。本机实测:

Shutdown scheduled for Mon 2026-11-02 16:09:52 CST, use 'shutdown -c' to cancel.

-c 取消待执行的关机任务。

三、systemctl 系:即停即走

systemctl poweroff
systemctl reboot
systemctl halt

这三个动词是 systemd 的首选接口。底层分别拉入 poweroff.target、reboot.target、halt.target,由 systemd-poweroff.service 等实际执行卸载、关闭 swap、清理设备、杀进程 [3][4]。与旧版 halt -p 的兼容差异不再需要关心,systemd 255 统一处理 [2]。

--no-block 可让 systemctl 不等关机完成就返回,适合远程脚本。

四、远程通过 SSH 关闭

ssh root@server 'systemctl poweroff'
ssh root@server 'shutdown -P now "远程维护"'

远程关闭和本地没有本质区别,核心依赖是 SSH 登录权限。大站运维手册推荐:先 shutdown -k 干跑一次,确认命令解析无误;再执行真实关机。单条 SSH 命令里要小心引号嵌套,推荐把整个 Linux 命令包在单引号里。

五、按环境差异

环境 shutdown systemctl 远程 SSH
物理机 x86_64 正常 正常 正常
WSL2 poweroff 会终止 WSL 实例 同上 通过 wsl.exe -d ... 模拟
容器 通常无 systemd(PID 1 非 systemd),systemctl 报错 同上 取决于容器内 init 系统

六、回滚、排错与局限性

排错速查

现象 原因 处理
shutdown: command not found 最小安装未装 sysvinit-utils apt install sysvinit-utils
systemctl: command not found 非 systemd 系统(OpenRC、runit 等) 改用对应 init 系统的 halt 命令
Failed to power off system via logind: Access denied 没有 PolicyKit 权限 以 root 执行,或配置 polkit 规则
远程 SSH 执行无反应 SELinux/AppArmor 阻断 SSH 命令 检查 audit.log 或 dmesg

局限性

  • WSL2 里执行 poweroff 会终止整个 WSL 实例,不能像物理机那样再次唤醒。
  • 容器中 PID 1 通常不是 systemd,systemctl 报错;应先确认 PID 1。
  • shutdown -f 或 systemctl --force poweroff 会绕过正常卸载流程,强制断电,文件系统损坏风险高,仅作最后手段。

实测记录

  • 环境:WSL2 Ubuntu 24.04,systemd 255 (255.4-1ubuntu8.16),内核 5.15。
  • shutdown --help:输出完整,含 -H/-P/-r/-k/-c。
  • shutdown -k +10 "WSL 测试停止":成功写入计划,输出 “Shutdown scheduled…”。
  • shutdown -c:成功取消,exit 0。
  • systemctl list-unit-files | grep -E "poweroff|reboot|halt":全部 static;is-enabled 为 disabled,符合 systemd 静态 target 设计。
  • systemctl cat poweroff.target:输出正确,Requires=systemd-poweroff.service。

参考资料

文中主要命令已在 WSL Ubuntu(24.04)实测并核对其在 Debian 系与通用发行版的文档口径。