正在运行两个apcupsd实例,每个实例都连接到自己的UPS.它们都可以检测UPS何时处于电池状态,然后每个UPS都可以触发服务器上的关机.
问题是:如果只有一台UPS电池耗尽,怎么不关机?
注意:Smart-UPS 3000 XLM具有“电源同步”功能,可以连接到其对等设备并检测其状态.但当我从其中一个中取出插头时,无论如何都发送了关机命令.我正在考虑修改关闭脚本以检查“apcaccess”,如果其他ups已关闭.任何有关此的经验将不胜感激!
解决方法
为了使doshutdown事件有点连接,apcupsd的两个实例需要一个专门定制的配置文件.差异将驻留在必须从中执行事件脚本的目录中.
第一个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脚本,它不会直接关闭机器,但必须检查其他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停止正在进行的操作.五行检查是否已创建其他UPS-down文件;如果不是,则为ups关闭创建下行文件,然后退出.如果是,意味着另一台UPS已经关闭,那么这台UPS也会停机,因此脚本应该继续并关闭机器.
文件/tmp/usp[01].is.down指示ups [01]当前是否已关闭.
重要提示:apcupsd的init.d启动脚本应删除这些文件(如果它们是在上一个会话中创建的):
rm -f /tmp/usp[01].is.down
最后,上面创建的目录/ etc / apcupsd / ups [01]应该被授予对apcupsd用户(或运行实例的相关用户)的访问权限.
chown -R apcupsd /etc/apcupsd/ups[01]
编辑修复了/tmp/ups[01].is.down名称,缺少.is.