如何在通过ipmitool执行power cycle前先完成IPMI优雅关机?
如何在通过ipmitool执行power cycle前先完成IPMI优雅关机?
当然可以实现!不用远程连接IPMI监控,完全可以在本地通过脚本把优雅关机和超时后的强制冷启动结合起来,完美匹配你当前的自动化场景。
核心思路是:先发送IPMI优雅关机命令,然后启动一个后台进程等待一段时间,要么等系统成功进入关机流程,要么超时后自动触发冷启动。这里有两种实用的脚本方案供你选择:
基础超时触发方案
这个方案简单直接,不管系统是否成功优雅关机,只要超时就执行冷启动,适合不需要额外状态检查的场景:
#!/bin/bash # 发送IPMI优雅关机命令 ipmitool power soft # 后台启动独立进程,等待60秒后执行冷启动(可根据你的系统调整超时时间) nohup bash -c "sleep 60; ipmitool power cycle" > /dev/null 2>&1 &
- 用
nohup让后台进程脱离当前会话,即使当前脚本因系统关机被终止,这个进程也能继续运行到超时时间 - 把输出重定向到
/dev/null避免生成冗余日志文件
带状态检查的优化方案
如果想尽量避免不必要的冷启动,可以先检查系统是否真的在进行优雅关机,超时后再执行冷启动:
#!/bin/bash # 发送IPMI优雅关机命令 ipmitool power soft # 设置最大等待超时(单位:秒) MAX_WAIT=60 wait_count=0 # 循环检查系统状态(systemd系统适用,非systemd系统可替换成对应检查命令) while [ $wait_count -lt $MAX_WAIT ]; do if systemctl is-system-running 2>/dev/null | grep -qE '(stopping|offline)'; then echo "系统已进入关机流程,无需执行冷启动" exit 0 fi sleep 1 wait_count=$((wait_count + 1)) done # 超时未关机,执行冷启动 echo "优雅关机超时,触发强制冷启动" ipmitool power cycle
- 这个脚本会持续检查系统状态,如果检测到系统已经在关机,就提前退出,避免多余的冷启动操作
- 建议用
nohup启动这个脚本,确保系统关机过程中脚本能完成整个检查流程
把脚本集成到你的自动化任务里,就能实现先尝试优雅关机、再自动兜底冷启动的需求,完全不需要远程连接IPMI。
备注:内容来源于stack exchange,提问作者Rino Bino
相关产品推荐
相关产品推荐

