You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何禁用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处理各类事件(断电、低电量等)的核心脚本,我们需要确保里面没有任何会触发关机的命令:

  1. 打开/etc/apcupsd/apccontrol文件
  2. 找到以下事件对应的处理块,注释掉或删除其中的关机命令:
    • 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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.21 11:44:37