我最近在新的 Ubuntu 14.04 64 位服务器上安装了 Network UPS Tools (nut)。我使用的配置文件与旧的 Ubuntu 12.04 32 位服务器上的配置文件完全相同。
一切顺利,除了当我通过以下命令测试 14.04 服务器的自动关机时
sudo upsmon -c fsd
当系统因故障关闭时,UPS 并未关闭负载,因此服务器从未重新启动。
事实证明,我的 14.04 服务器上的 nut 版本与 12.04 服务器上的 init 脚本不同(较新)。所以我想,也许这些较新的脚本中存在错误。
为了弄清楚发生了什么,我断开了服务器与 UPS 电源插座的连接,并将其直接连接到公用电源插座,但保留了 USB 连接并启动了服务器。然后,我从终端控制台发送了以下命令:
sudo /sbin/upsdrvctl shutdown
UPS 关闭了负载,过了一会儿,又恢复了正常。
接下来,我临时修改了 /etc/init.d/halt 脚本,替换了以下代码段:
# See if we need to cut the power.
if [ "$INIT_HALT" = "POWEROFF" ] && [ -x /etc/init.d/ups-monitor ]
then
/etc/init.d/ups-monitor poweroff
fi
有了这个:
/sbin/upsdrvctl shutdown
原始代码调用“ups-monitor”,它是脚本“nut-client”的链接,在进行一些检查后,调用脚本“nut-server”,后者又发出命令“/sbin/upsdrvctl shutdown”来关闭 UPS 负载。
所以现在,有了这个临时的 mod,nut 脚本就不碍事了。然而,当我给出命令时
sudo upsmon -c fsd
系统崩溃了,但是UPS再次没有关闭负载。
难道是当运行 halt 脚本时,Ubuntu server 14.04 会阻止运行级别 0 上的 USB 通信吗???