如何通过编程获取Back-UPS剩余电量以实现低电量自动关机
如何通过编程获取Back-UPS剩余电量以实现低电量自动关机
嘿,这个需求其实挺常见的,我之前帮朋友处理过类似的情况,用apcupsd这个专门针对APC UPS(包括你用的Back-UPS系列)的管理工具就能完美解决,给你一步步拆解实现步骤:
1. 安装apcupsd工具
不同Linux发行版的安装命令略有不同:
- Debian/Ubuntu系:
sudo apt update && sudo apt install apcupsd - CentOS/RHEL系:
sudo yum install apcupsd
2. 配置apcupsd与UPS通信
安装完成后需要调整配置文件,让工具能识别你的UPS:
编辑配置文件sudo nano /etc/apcupsd/apcupsd.conf,重点修改以下几个参数:
UPSCABLE:如果是USB连接的UPS,设为usb;如果是串口连接,对应设为smart或其他类型UPSTYPE:USB连接的话设为usbDEVICE:USB连接时可以留空,或者填/dev/usb/hiddev0(部分系统需要)
修改完后重启服务让配置生效:
sudo systemctl restart apcupsd
3. 验证是否能获取UPS电量信息
运行以下命令查看UPS状态:
apcaccess status
输出结果里会有一行类似BCHARGE : 98.0 Percent的内容,BCHARGE后面的数值就是剩余电量百分比。
4. 编写电量检查脚本
写一个简单的shell脚本,用来提取电量并判断是否需要关机:
创建脚本文件sudo nano /usr/local/bin/ups_check.sh,内容如下:
#!/bin/bash # 获取剩余电量(取整数部分) BATTERY=$(apcaccess status | grep BCHARGE | awk '{print $3}' | cut -d. -f1) # 判断电量是否低于30% if [ $BATTERY -lt 30 ]; then # 记录日志到系统日志文件 logger "UPS剩余电量为${BATTERY}%,低于阈值,执行自动关机" # 执行关机命令 sudo shutdown -h now fi
给脚本添加执行权限:
sudo chmod +x /usr/local/bin/ups_check.sh
5. 设置定时任务(cron)
让脚本每10分钟运行一次,打开cron编辑界面:
crontab -e
添加以下一行内容(注意替换脚本路径为你实际的路径):
*/10 * * * * /usr/local/bin/ups_check.sh
保存退出后,cron就会自动按设定频率执行脚本了。
一些注意事项
- 确保apcupsd服务处于运行状态:
sudo systemctl status apcupsd,如果没启动就手动启动:sudo systemctl start apcupsd - 可以拔掉UPS电源模拟低电量场景,测试脚本是否能正常触发关机
- 如果你的UPS不是APC品牌,可能需要换其他工具(比如nut),但Back-UPS基本都是APC的,apcupsd完全适用
- 关机命令需要sudo权限,建议用root用户设置cron任务,或者给执行脚本的用户配置免密sudo权限
备注:内容来源于stack exchange,提问作者john-jones
相关产品推荐
相关产品推荐

