poweroff命令是Linux系统中用于安全关闭计算机并切断电源的命令行工具。它会终止所有运行中的进程,卸载文件系统,同步磁盘数据,然后向系统发送关机信号,最终切断电源(如果硬件支持)。
poweroff [选项]
或者使用绝对路径:
/sbin/poweroff [选项]
| 选项 | 说明 |
|---|---|
--help |
显示帮助信息 |
--halt |
停止系统但不切断电源(与halt命令相同) |
-p, --poweroff |
切断电源(默认行为) |
--reboot |
重新启动系统(与reboot命令相同) |
-f, --force |
强制关机,不调用shutdown |
-w, --wtmp-only |
只写wtmp关机记录,不实际关机 |
-d, --no-wtmp |
不写wtmp关机记录 |
-n, --no-sync |
关机前不同步磁盘缓存(危险!) |
-i, --no-ifdown |
关机前不关闭网络接口 |
-h, --no-halt |
关机但不停止系统(某些版本支持) |
poweroff命令的正常关机流程包括以下步骤:
向所有进程发送SIGTERM信号,让它们优雅地结束
终止所有用户进程,卸载所有文件系统
将所有缓存数据写入磁盘(sync操作)
按照运行级别顺序停止所有系统服务
向ACPI发送断电信号,硬件断电
poweroff命令通常是系统基本工具的一部分,大多数Linux发行版默认已安装。它可能位于以下包中:
# poweroff通常包含在sysvinit-utils或systemd-sysv包中
sudo apt update
sudo apt install sysvinit-utils
# 通常已安装,如果需要重新安装
sudo yum install util-linux
# 或使用dnf(Fedora/RHEL8+)
sudo dnf install util-linux
# 通常已安装,如果需要
sudo pacman -S util-linux
/usr/bin/systemctl的符号链接。运行poweroff实际上是调用systemctl poweroff。
使用默认参数安全关机:
# 正常关机(需要root权限)
sudo poweroff
# 或使用systemctl(systemd系统)
sudo systemctl poweroff
使用-f选项强制关机,跳过正常关机流程:
# 强制立即关机(危险!可能导致数据丢失)
sudo poweroff -f
# 强制关机并断电
sudo poweroff -f --poweroff
使用--halt选项停止系统运行,但保持电源:
# 停止系统但不切断电源
sudo poweroff --halt
# 查看系统状态(如果支持)
who -b # 查看最后一次启动时间
使用-w选项只记录关机日志,不实际关机:
# 写入关机记录但不真正关机(用于测试)
sudo poweroff -w
# 查看关机记录
last -x | grep shutdown
使用-n选项跳过磁盘同步(危险操作):
# 关机前不同步磁盘缓存(非常危险!)
sudo poweroff -n
虽然poweroff本身不支持延迟关机,但可以结合其他命令实现:
# 5分钟后关机
sudo shutdown -h +5
# 使用sleep命令延迟关机
sudo sleep 300 && sudo poweroff &
# 在特定时间关机(例如23:00)
sudo shutdown -h 23:00
通过SSH远程关机其他计算机:
# 通过SSH远程关机
ssh user@remote-server "sudo poweroff"
# 使用密钥认证远程关机
ssh -i ~/.ssh/id_rsa admin@192.168.1.100 "sudo /sbin/poweroff"
# 远程关机并等待完成
ssh user@remote-server "sudo poweroff" && echo "远程服务器已关机"
查看系统关机日志和原因:
# 查看系统日志中的关机记录
sudo journalctl -b -1 | grep -i "shutdown\|poweroff"
# 查看最后一次关机时间
last -x | head -5
# 查看系统启动日志中的关机信息
dmesg | grep -i "shutdown"
# 查看wtmp日志
sudo last -f /var/log/wtmp
创建关机前执行的脚本:
#!/bin/bash
# 关机前执行的自定义脚本 /usr/local/bin/pre-shutdown.sh
echo "开始执行关机前清理..."
logger "用户自定义关机脚本开始执行"
# 备份重要文件
tar -czf /backup/last-shutdown-$(date +%Y%m%d-%H%M).tar.gz /home/user/important_data/
# 发送关机通知邮件
echo "服务器 $(hostname) 将在 $(date) 关机" | mail -s "关机通知" admin@example.com
# 停止特定服务
systemctl stop myservice
echo "关机前清理完成"
logger "用户自定义关机脚本执行完成"
# 调用真正的关机命令
exec /sbin/poweroff "$@"
使用cron设置定时关机:
# 编辑crontab
sudo crontab -e
# 添加以下行,每天23:30自动关机
30 23 * * * /sbin/poweroff
# 或者每周五18:00关机
0 18 * * 5 /sbin/poweroff
# 每月1号凌晨2点关机
0 2 1 * * /sbin/poweroff
根据系统条件决定是否关机:
#!/bin/bash
# 条件关机脚本
# 检查磁盘使用率
DISK_USAGE=$(df -h / | awk 'NR==2 {print $5}' | tr -d '%')
if [ "$DISK_USAGE" -gt 90 ]; then
echo "磁盘使用率过高: ${DISK_USAGE}%,不执行关机"
exit 1
fi
# 检查是否有用户登录
LOGGED_IN_USERS=$(who | wc -l)
if [ "$LOGGED_IN_USERS" -gt 0 ]; then
echo "有用户登录系统,广播关机消息"
wall "系统将在5分钟后关机,请保存您的工作!"
sleep 300
fi
# 执行关机
echo "正在关机..."
sudo /sbin/poweroff
监控系统关机状态和原因:
#!/bin/bash
# 关机状态监控脚本
# 监控关机事件
journalctl -f | while read line; do
if echo "$line" | grep -q "systemd.*shutdown\|poweroff\|halt"; then
echo "$(date): 检测到关机事件 - $line"
# 发送警报
echo "检测到关机事件: $line" | mail -s "关机警报" admin@example.com
fi
done
| 命令 | 主要功能 | 特点 | 适用场景 |
|---|---|---|---|
| poweroff | 关闭系统并断电 | 默认执行完整关机流程,切断电源 | 普通关机,需要断电的情况 |
| shutdown | 计划关机或重启 | 支持延迟关机、广播消息、取消关机 | 计划关机,多用户环境 |
| halt | 停止系统运行 | 停止CPU但不一定切断电源 | 系统维护,不切断电源的停止 |
| reboot | 重新启动系统 | 执行完整关机流程后重新启动 | 系统重启,应用更新后 |
| init 0 | 切换到运行级别0 | 传统的SysV init关机方式 | 兼容旧系统 |
| systemctl poweroff | systemd系统关机 | 现代systemd系统的标准关机方式 | systemd系统 |
| poweroff | shutdown |
|---|---|
| 立即关机(默认) | 可以设置延迟关机时间 |
| 功能相对简单 | 功能丰富,支持广播消息、取消关机 |
| 直接调用关机流程 | 创建/etc/nologin文件阻止新登录 |
| 适用于简单关机需求 | 适用于多用户环境或计划关机 |
| 部分系统是shutdown的符号链接 | 是更底层的关机命令 |
如果关机过程卡住,可以尝试以下方法:
Ctrl+Alt+Del组合键(某些系统支持)Ctrl+Alt+F2)检查进程Alt+SysRq+O(如果启用SysRq)尝试关机journalctl -b -1 | grep -i "fail\|error\|timeout"这取决于使用的关机命令:
shutdown -c取消killall poweroffsystemctl cancel-poweroff(某些版本支持)shutdown +10这样的延迟命令,留出取消时间是的,关机通常需要root权限:
poweroff、shutdown等命令sudo:sudo poweroff# /etc/sudoers 或 /etc/sudoers.d/poweroff
%users ALL=(ALL) NOPASSWD: /sbin/poweroff
可能的原因:
--halt选项,只停止系统不切断电源poweroff -p强制断电,或检查ACPI支持shutdown命令并广播关机消息-f(强制)和-n(不同步)选项,除非紧急情况计划关机工具,支持延迟和广播
系统重启命令
停止系统运行但不切断电源
systemd系统控制工具,可关机重启