一台服务器,两台冗余电源上的APC UPS:如何触发关机?

我有一个服务器机架,其冗余电源插入两个APC Smart-UPS 3000 XLM。 每个UPS连接到两个不同的主电源。

两个apcupsd实例正在运行,每个连接到自己的UPS。 他们既可以检测到UPS在电池上,每个UPS都可以在服务器上触发关机。

问题是:如果只有一个UPS电池耗尽,怎么不能关机?

注意:Smart-UPS 3000 XLM具有“电源同步”function,可以连接到对等设备并检测其状态。 但是当我从其中一个拔出插头时,无论如何都发送关机命令。 我正在考虑修改closures脚本来检查“apcaccess”,如果其他ups是closures的。 任何经验,将不胜感激!

目前,当两个UPS中的一个死亡时,触发doshutdown事件,并通过apccontrol执行默认脚本。 doshutdown脚本会忽略第二台UPS,因为它们不是事件连接的,并且在关机的情况下正常进行。

为了让doshutdown事件有点连接, apcupsd的两个实例需要一个专门定制的configuration文件。 差异将驻留在事件脚本必须执行的目录中。

第一个ups的主要属性在/etc/apcupsd/apcupsd.ups0.conf

 SCRIPTDIR /etc/apcupsd/ups0 UPSNAME ups0 DEVICE /dev/ups0 PWRFAILDIR /etc/apcupsd/ups0 NOLOGINDIR /etc/apcupsd/ups0 NISPORT 3551 EVENTSFILE /var/log/apcupsd.0.events 

对于ups1,在/etc/apcupsd/apcupsd.ups1.conf

 SCRIPTDIR /etc/apcupsd/ups1 UPSNAME ups1 DEVICE /dev/ups1 PWRFAILDIR /etc/apcupsd/ups1 NOLOGINDIR /etc/apcupsd/ups1 NISPORT 3552 EVENTSFILE /var/log/apcupsd.1.events 

每个scriptdir应该得到一个默认脚本的副本。
我们要定制doshutdown脚本,它不会直接closures机器,而是要检查另一个UPS是否仍然处于关机状态,或者是否处于关机状态。

doshutdown脚本的顶部,我们可以添加类似的东西

为ups0

 if [ ! -f /tmp/ups1.is.down ] then touch /tmp/ups0.is.down exit 99 fi 

为ups1

 if [ ! -f /tmp/ups0.is.down ] then touch /tmp/ups1.is.down exit 99 fi 

状态99有一个特殊的含义,告诉apccontrol停止正在进行的动作。 五行检查是否已经创build另一个UPS下行文件; 如果不是 ,则会为正在closures的上下文创build下行文件,然后退出。 如果是的话 ,意味着另一台UPS停机,这台机器也停机,因此脚本应该继续关机。

文件/tmp/usp[01].is.down指示ups [01]当前是否closures。

重要:apcupsd的init.d启动脚本应删除这些文件(如果它们是在以前的会话中创build的):

 rm -f /tmp/usp[01].is.down 

最后,上面创build的目录/ etc / apcupsd / ups [01]应该被授予对apcupsd用户(或运行实例的相关用户)的访问权限。

 chown -R apcupsd /etc/apcupsd/ups[01] 

请看一下详细的文档 。

编辑修正了/tmp/ups[01].is.down名称, /tmp/ups[01].is.down丢失了。

看看NUT。 它处理得很好。 定义每台UPS的电源数量和所需的电源数量。 只要UPS上没有足够的电源,就不会触发关机。