APC UPS
本文档描述了如何安装APC UPS守护进程。APC UPS可以通过RS-232或USB串行连接与Linux系统通信。在长时间停电的情况下,如果APC UPS的电池电量耗尽,它可以指示Linux系统执行安全关机。
安装软件包
配置APC UPS
APC UPS守护进程的主配置文件位于/etc/apcupsd/apcupsd.conf。默认配置适用于通过USB线连接的设备。
测试
接下来,等待大约一分钟,并确认守护进程正在运行并正确监控电池。
# apcaccess status
APC : 001,033,0819 DATE : Sat Mar 05 SOMETIME 2005 HOSTNAME : somehostname RELEASE : 3.10.16 VERSION : 3.10.16 (04 November 2004) unknown UPSNAME : somehostname CABLE : USB Cable MODEL : Back-UPS ES 725 UPSMODE : Stand Alone STARTTIME: Sat Mar SOMETIME 2005 STATUS : ONLINE LINEV : 119.0 Volts LOADPCT : 23.0 Percent Load Capacity BCHARGE : 100.0 Percent TIMELEFT : 30.5 Minutes MBATTCHG : 5 Percent MINTIMEL : 3 Minutes MAXTIME : 0 Seconds LOTRANS : 088.0 Volts HITRANS : 138.0 Volts ALARMDEL : Always BATTV : 13.5 Volts NUMXFERS : 0 TONBATT : 0 seconds CUMONBATT: 0 seconds XOFFBATT : N/A STATFLAG : 0x02000008 Status Flag MANDATE : 2002-12-02 SERIALNO : QB0249360043 BATTDATE : 2000-00-00 NOMBATTV : 12.0 FIRMWARE : 02.n2.D USB FW:n2 APCMODEL : Back-UPS ES 725 END APC : Sat SOMETIME 2005
要完全测试您的设置
- 在
/etc/apcupsd/apcupsd.conf文件中,将TIMEOUT从0更改为1。 - 拔掉UPS的市电插头。
- 观察您的Linux系统是否在短时间内关机。
- 将UPS重新插入市电。
- 启动您的Linux系统。
- 在
/etc/apcupsd/apcupsd.conf文件中,将TIMEOUT从1改回0。
一切就绪后,只需启用apcupsd服务即可。
休眠而非关机
您可以让您的系统休眠而非关机。首先,请确保系统能够正常休眠。要设置休眠,请参阅Power management/Suspend and hibernate。
创建休眠脚本
以root身份在/usr/local/bin/hibernate下创建此文件。
#!/bin/bash # Hibernate the system - designed to be called via symlink from /etc/apcupsd # directory in case of apcupsd initiating a shutdown/reboot. Can also be used # interactively or from any script to cause a hibernate. # Do the hibernate /usr/bin/systemctl hibernate # At this point system should be hibernated - when it comes back, we resume this script here # On resume, tell controlling script (/etc/apcupsd/apccontrol) NOT to continue with default action (i.e. shutdown). exit 99
使其 可执行。
链接休眠脚本供apcupsd使用
从/etc/apcupsd目录创建一个到该脚本的符号链接。这样,该目录下的apcupd的apccontrol脚本在执行这些操作时将调用休眠脚本,而不是执行默认的关机操作。
# ln -s /usr/local/bin/hibernate /etc/apcupsd/doshutdown
如果您正在将apcupsd作为服务器上运行的apcupsd的客户端运行,并且希望在服务器关机或与服务器通信丢失时,您的机器也休眠,那么您可能还需要添加
# ln -s /usr/local/bin/hibernate /etc/apcupsd/remotedown
让apcupsd在休眠完成后关闭UPS电源
一旦PC成功休眠,通常的做法是关闭UPS以节省电池电量并防止电池完全耗尽。这可以通过systemd中的电源挂起事件来实现。
创建/usr/lib/systemd/system-sleep/ups-kill并将其内容放入其中。
#!/bin/bash
case $2 in
# In the event the computer is hibernating.
hibernate)
case $1 in
# Going into a hibernate state.
pre)
# See if this is a powerfail situation.
if [ -f /etc/apcupsd/powerfail ]; then
echo
echo "ACPUPSD will now power off the UPS"
echo
/etc/apcupsd/apccontrol killpower
echo
echo "Please ensure that the UPS has powered off before rebooting"
echo "Otherwise, the UPS may cut the power during the reboot!!!"
echo
fi
;;
# Coming out of a hibernate state.
post)
# If there are remnants from a powerfail situation, remove them.
if [ -f /etc/apcupsd/powerfail ]; then
rm /etc/apcupsd/powerfail
fi
# This may also exist, need to remove it.
if [ -f /etc/nologin ]; then
rm /etc/nologin
fi
# Restart the daemon; otherwise it may be unresponsive in a
# second powerfailure situation.
systemctl try-restart apcupsd
;;
esac
;;
esac
使脚本可执行。
现在您可以测试您的设置。
故障排除
如果通过USB线连接,桌面环境也会感知到UPS
例如,KDE的默认设置是在UPS电池供电超过10分钟且鼠标未移动时将计算机置于睡眠状态。在许多计算机上,这会导致崩溃。这可以在KDE系统设置 > 电源管理 > 电池供电中更改。
hid-generic : control queue full
如果您使用的是基于systemd的initramfs,您可能会遇到每秒发生多次的“control queue full”日志消息。您需要将hid-generic添加到您的modules中,并重新生成您的initramfs。