如何禁用apcupsd的自动管理功能,仅保留状态查询以适配自定义脚本?
如何禁用apcupsd的自动管理功能,仅保留状态查询以适配自定义脚本?
看起来你已经尝试注释了apccontrol里的关机命令,但apcupsd还是在触发自动关机序列对吧?别担心,我们可以一步步彻底关掉它的自动管理逻辑,只保留状态查询能力来支持你的自定义脚本。
第一步:调整apcupsd主配置,关闭所有自动关机触发条件
编辑你的/etc/apcupsd/apcupsd.conf文件,确保以下参数设置为完全不会触发关机的数值:
# 禁用基于电池电量的关机触发(0表示永不触发) BATTERYLEVEL 0 # 禁用基于剩余运行时间的关机触发(设为极大值) MINUTES 9999 # 禁用基于断电时长的关机触发(0表示永不因超时关机) TIMEOUT 0 # 设置UPS为独立模式,不参与系统自动管理 UPSMODE disable # 关机前等待时间设为0,避免不必要的延迟 KILLDELAY 0
这些参数会让apcupsd完全忽略所有默认的关机触发规则,不管电池剩余电量、运行时间还是断电时长,都不会主动发起关机。
第二步:修改apccontrol脚本,移除所有自动关机逻辑
apccontrol是apcupsd处理各类事件(断电、低电量等)的核心脚本,我们需要确保里面没有任何会触发关机的命令:
- 打开
/etc/apcupsd/apccontrol文件 - 找到以下事件对应的处理块,注释掉或删除其中的关机命令:
onbattery(断电时的处理)lowbattery(低电量时的处理)timeout(超时触发的处理)emergency(紧急情况的处理)
比如原本的lowbattery块可能是这样:
lowbattery) logger -t apcupsd "Low battery alarm on UPS ${UPSNAME}" ${SHUTDOWN} ;;
把它改成仅记录日志的形式:
lowbattery) logger -t apcupsd "Low battery alarm on UPS ${UPSNAME} - 自定义脚本将处理该事件" ;;
这样所有事件只会生成日志,不会执行关机操作。
第三步:验证配置并重启服务
修改完成后,重启apcupsd服务让配置生效:
systemctl restart apcupsd
你可以用apcaccess status命令确认状态正常,接着测试拔掉电源——正常情况下,UPS会持续供电直到电池耗尽,而apcupsd只会记录断电事件,不会触发系统关机。
第四步:基于apcaccess搭建自定义脚本
现在你可以完全通过apcaccess status的输出来编写自己的控制脚本,比如提取STATUS(ONLINE/ONBATT)、BCHARGE(电池电量)、TIMELEFT(剩余时间)这些字段,实现你想要的逻辑。
举个简单的示例,检测是否处于电池供电模式的脚本片段:
UPS_STATUS=$(apcaccess status | grep STATUS | awk '{print $3}') if [ "$UPS_STATUS" = "ONBATT" ]; then echo "当前处于电池供电模式,执行自定义逻辑..." # 这里写入你的自定义处理代码 fi
备注:内容来源于stack exchange,提问作者invilso
相关产品推荐
相关产品推荐

