跳转至内容

APC UPS

来自 ArchWiki

本文档描述了如何安装APC UPS守护进程。APC UPS可以通过RS-232或USB串行连接与Linux系统通信。在长时间停电的情况下,如果APC UPS的电池电量耗尽,它可以指示Linux系统执行安全关机。

安装软件包

安装 apcupsd 软件包。

配置APC UPS

APC UPS守护进程的主配置文件位于/etc/apcupsd/apcupsd.conf。默认配置适用于通过USB线连接的设备。

测试

首先,启用启动apcupsd.service

接下来,等待大约一分钟,并确认守护进程正在运行并正确监控电池。

# 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

要完全测试您的设置

  1. /etc/apcupsd/apcupsd.conf文件中,将TIMEOUT0更改为1
  2. 拔掉UPS的市电插头。
  3. 观察您的Linux系统是否在短时间内关机。
  4. 将UPS重新插入市电。
  5. 启动您的Linux系统。
  6. /etc/apcupsd/apcupsd.conf文件中,将TIMEOUT1改回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

使其 可执行

/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。

参见