我安装了 Proline 650 UPS(串行)
额外详细信息:UPS 与单个 12v SLA 电池进行串行连接。(它未列在 NUT 兼容性列表中,但在编译 NUT-scanner 后检测到它可以与 blazer_ser 驱动程序配合使用。它似乎运行完美,如果我让 ups-monitor 运行,当 UPS 使用电池供电 30 秒或一分钟或更长时间时,服务器将自动关闭。操作系统:Debian 7 Wheezy。硬件是单个低功耗无头 i5 服务器,配备 1 个 3.5 英寸硬盘。
问题
UPS 在大约 5 分钟后自动关闭,而报告的电池容量仍为 65%(可能低估了容量,因为我刚刚安装了新电池),并且在关闭负载之前,NUT 报告的电池电压为 12.1v。无论服务器是否轮询 UPS,也无论负载轻还是无负载,UPS 都会在大约 5 分钟后自动关闭。(在某些测试中,我直接从线路电源为服务器供电,以避免 UPS 执行节能时意外断电)
我原本以为,NUT 每隔几秒钟轮询一次 UPS 以获取状态更新,UPS 就会意识到有一台计算机依赖它,但 UPS 并不聪明。UPS 显示服务器消耗了最大输出容量的 12%,它似乎认为这是“无负载”。UPS 关闭负载后,电池端子(单个 12v 电池)的电压空载电压约为 12.6v,表明它仍几乎充满电。
这种自动关机行为是在 NUT 文档中称为 energy_saving(电池.节能)。
blazer_ser 驱动程序似乎没有提供禁用 energy_saving 的方法。没有办法让 UPS 负载输出保持开启,这似乎很疯狂。UPS 怎么能被宣传为提供 x 量的电力,但却过早关闭,而没有简单的方法在软件中纠正这种行为?
这是我的状态输出
$ upsc[电子邮件保护] 电池充电:100 电池电压:13.60 电池电压高:13.00 电池电压低:10.40 电池电压标称值:12.0 设备类型:ups 驱动程序名称:blazer_ser 驱动程序.参数.轮询间隔:2 驱动程序.参数.端口: /dev/ttyS0 驱动程序版本:2.6.4 驱动程序.版本.内部: 1.55 输入电流标称值:3.0 输入频率:50.1 输入频率标称值:50 输入电压:221.0 输入电压故障:221.0 输入电压标称值:220 输出电压:221.0 ups.beeper.status:已启用 ups.延迟关机: 30 ups.delay.启动: 180 ups.负载: 12 ups.状态:OL ups.温度: 25.0 ups.type: 离线/在线互动
我也运行了upsrw -u admin -p mypass -s -l nutdev1
,但没有节能或类似的选项。只有像 beeper.toggle(经过测试,按预期工作)和其他基本的东西。有一个即时关闭负载的选项。它起作用了。有一个加载选项,我尝试反复调用它,希望延迟节能倒计时,但没有用。还有一个关机禁用选项,但这也没有帮助。
欢迎提出任何建议。我想到了一些我不太喜欢的事情:
- 我尝试禁用节能功能,尽管没有列出该选项
upscmd -u upsadmin1 -p mypass nutdev1 battery.energysave
Unexpected response from upsd: ERR CMD-NOT-SUPPORTED
- 尝试其他驱动程序
- 更换另一个 UPS(不保证其他本地 UPS 可以与 NUT 配合良好)
- 为了被视为负载而连接更多负载(浪费电力)
- 通过电子方式入侵 UPS 以欺骗其负载检测(浪费时间)
似乎必须有一个简单的软件解决方案,这就是我询问的原因。
================
根据 BillThor 的建议,我更新了我的 upsmon.conf 文件:
$ grep -v'^#'/etc/nut/upsmon.conf 监视器[电子邮件保护]1 foo2 bar2 主人 最低供给量 1 SHUTDOWNCMD“/usr/bin/logger 假关机” 轮询频率 5 轮询频率警报 5 主机同步 15 死亡时间 15 电源关闭标志 /etc/killpower NOTIFYFLAG 在线 SYSLOG+WALL 通知标志 ONBATT SYSLOG+WALL 通知标志 LOWBATT SYSLOG+WALL 通知标志 FSD SYSLOG+WALL 通知标志 COMMOK SYSLOG+WALL NOTIFYFLAG 命令 SYSLOG+WALL NOTIFYFLAG 关闭 SYSLOG+WALL 通知标志 REPLBATT SYSLOG+WALL 通知标志 NOCOMM SYSLOG+WALL NOTIFYFLAG NOPARENT SYSLOG+WALL RBWARNTIME 43200 无通信警告时间 300 最终延迟 5
我连续 3 次打开 UPS(无线路电源),但未充电。电池容量和电压没有变化。从未发生过 LB 状态。以下是系统日志
12 月 2 日 07:08:00 t upsmon[2000]: 启动成功 十二月 2 07:08:00 t upsd[1942]: 用户[电子邮件保护]登录 UPS [nutdev1] 十二月 2 07:08:30 t upsmon[2002]: UPS[电子邮件保护]电池 12 月 2 日 07:13:34 t blazer_ser[1939]: 与 UPS 的通信丢失:状态读取失败! 12 月 2 日 07:13:36 t upsd[1942]: UPS [nutdev1] 的数据已过时 - 检查驱动程序 十二月 2 07:13:40 t upsmon[2002]: 轮询 UPS [[电子邮件保护]] 失败 - 数据过时 十二月 2 07:13:40 t upsmon[2002]: 与 UPS 通信[电子邮件保护]丢失的 十二月 2 07:13:45 t upsmon[2002]: 轮询 UPS [[电子邮件保护]] 失败 - 数据过时 十二月 2 07:13:50 t upsmon[2002]: 轮询 UPS [[电子邮件保护]] 失败 - 数据过时 十二月 2 07:13:55 t upsmon[2002]: 轮询 UPS [[电子邮件保护]] 失败 - 数据过时 十二月 2 07:13:55 t upsd[1942]: 客户端[电子邮件保护]在 UPS 上设置 FSD [nutdev1] 12 月 2 日 07:13:55 t upsmon[2002]: 正在执行自动断电关机 十二月 2 07:13:55 t upsmon[2002]: 自动注销并关机程序 十二月 2 07:14:00 t logger: 假关机 十二月 2 07:17:31 t blazer_ser[1939]: 与 UPS 的通信已重新建立 12 月 2 日 07:17:31 t upsd[1942]: UPS [nutdev1] 数据不再过时 12 月 2 日 07:22:38 t blazer_ser[1939]: 与 UPS 的通信丢失:状态读取失败! 12 月 2 日 07:22:40 t upsd[1942]: UPS [nutdev1] 的数据已过时 - 检查驱动程序 十二月 2 07:25:23 t blazer_ser[1939]: 与 UPS 的通信已重新建立 12 月 2 日 07:25:23 t upsd[1942]: UPS [nutdev1] 数据不再过时 12月2日 07:29:54 t upsd[1942]:即时命令:[电子邮件保护]在 nutdev1 上执行了关机停止 十二月 2 07:29:55 t blazer_ser[1939]: instcmd: 命令 [shutdown.stop] 已处理 12月2日 07:30:17 t upsd[1942]:即时命令:[电子邮件保护]在 nutdev1 上执行了关机停止 十二月 2 07:30:18 t blazer_ser[1939]: instcmd: 命令 [shutdown.stop] 已处理 12月2日 07:30:25 t upsd[1942]:即时命令:[电子邮件保护]在 nutdev1 上执行了关机停止 十二月 2 07:30:26 t blazer_ser[1939]: instcmd: 命令 [shutdown.stop] 已处理 12 月 2 日 07:30:31 t blazer_ser[1939]: 与 UPS 的通信丢失:状态读取失败! 12 月 2 日 07:30:33 t upsd[1942]: UPS [nutdev1] 的数据已过时 - 检查驱动程序 十二月 2 07:31:32 t blazer_ser[1939]: 与 UPS 的通信已重新建立 12 月 2 日 07:31:32 t upsd[1942]: UPS [nutdev1] 数据不再过时
如您所见,我尝试通过运行此命令来清除 FSD 标志/状态(该命令可以成功立即关闭负载或切换蜂鸣器)
upscmd -u upsadmin1 -p mypass nutdev1 shutdown.stop
但它并没有清除 FSD 状态。
以下是一些状态信息(我删除了不相关的行)
#我在 07:08:30 后拔掉电源后立即运行了此程序 $ upsc[电子邮件保护] 电池充电:69 电池电压:12.20 ups.延迟关机: 30 ups.delay.启动: 180 ups.负载: 0 ups.状态:OB **$ 日期 && upsc[电子邮件保护]** 2014 年 12 月 2 日星期二 07:11:29 EST 电池充电:65 电池电压:12.10 ups.延迟关机: 30 ups.delay.启动: 180 ups.负载: 0 ups.状态:OB #此后,除 ups.status 外,这些字段均未发生任何变化 **日期 && upsc[电子邮件保护]** 2014 年 12 月 2 日星期二 07:12:29 EST 电池充电:65 电池电压:12.10 ups.状态:OB $ 日期 && upsc[电子邮件保护] 2014 年 12 月 2 日星期二 07:18:26 EST 电池充电:65 电池电压:12.10 ups.状态: FSD OB ups.温度: 25.0 #还有几个,都一模一样,最后 **$ 日期 && upsc[电子邮件保护]** 2014 年 12 月 2 日星期二 07:30:28 EST 电池充电:65 电池电压:12.10 ups.状态: FSD OB $ 日期 && upsc[电子邮件保护] 2014 年 12 月 2 日星期二 07:31:11 EST 错误:数据过时
这些是我的 UPS 支持的即时命令
**upscmd -u upsadmin1 -p mypass -l nutdev1** UPS 支持的即时命令 [nutdev1]: beeper.toggle - 切换 UPS 蜂鸣器 **有效** load.off - 立即关闭负载 **有效** load.on - 立即打开负载**似乎什么也不做** shutdown.return - 关闭负载并在电源恢复时返回 shutdown.stayoff - 关闭负载并保持关闭状态 shutdown.stop - 停止正在进行的关机 **不会阻止关机或删除 FSD 标志** test.battery.start-开始电池测试 test.battery.start.deep - 开始深度电池测试 test.battery.start.quick - 开始快速电池测试 test.battery.stop - 停止电池测试
现在我尝试了更多的可能性。我尝试运行 test.battery.start.quick 来重新校准电池,负载为 35%。它使用电池运行了一两分钟,然后切换回线路电源。然后我又有了两个想法。我尝试禁用蜂鸣器,希望 UPS 能够保持开启状态,但它在 5 分钟后照常自动关闭。然后我有了另一个想法。我拔掉电源插头,然后运行 test.battery.start,希望我可以无限期地运行“电池测试”。但 UPS 仍然在 5 分钟后关闭。
基本上,这个 UPS 只适合关机,其他就没什么用了。我要再买一个 UPS。
答案1
除非您使用 中的命令upssched.conf
,否则 NUT 应等到 UPS 报告电池电量不足后再关机。请检查以确保那里没有安排任何事项。
一旦 NUT 开始关机,它将触发 UPS 在超时后重新开机。这是为了确保在 UPS 电池耗尽之前恢复供电时服务器能够重新启动。时间指定FINALDELAY
为upsmon.conf
。
您可能希望启用 中所有事件的所有通知日志记录upsmon.conf
。这可以让您确定系统为何这么快关闭。以下是我使用的设置:
NOTIFYFLAG ONBATT SYSLOG+WALL
NOTIFYFLAG ONLINE SYSLOG+WALL
NOTIFYFLAG FSD SYSLOG+WALL
NOTIFYFLAG SHUTDOWN SYSLOG+WALL
NOTIFYFLAG LOWBATT SYSLOG
NOTIFYFLAG REPLBATT SYSLOG
NOTIFYFLAG COMMOK SYSLOG
NOTIFYFLAG COMMBAD SYSLOG+WALL
NOTIFYFLAG NOCOMM SYSLOG+WALL
NOTIFYFLAG NOPARENT SYSLOG+WALL
如果 NUT 根据计时器脚本关闭,那么这就是我希望在日志中看到的行。看来 UPS 在 5 分钟后停止通信,并且 NUT 正在做最后的 FSD(强制关闭)。这就是我希望它做的事情。五分钟应该足够长,表明电力不太可能很快恢复。
Dec 2 07:13:55 t upsd[1942]: Client [email protected] set FSD on UPS [nutdev1]
我希望 NUT 用来shutdown.return
向 UPS 发出关机信号。一旦电源恢复,UPS 就会重新启动,如果在关机完成之前电源恢复,UPS 会短暂关机。
我希望ups.delay.shutdown
和ups.delay.start
是 UPS 关机重启周期的可调参数。 ups.delay.shutdown
应留出时间让服务器完成关机周期,可能需要增加。 ups.delay.start
应为电源恢复后电源稳定所需的时间。它还留出一些时间让电池在施加负载之前重新充电。
通常情况下,您不会希望在关机前将电池电量耗尽。您希望有足够的电池来再运行一两个周期,以防电量再次下降。
答案2
许多 UPS 都有低负载自动关机功能。如果负载低于 UPS 额定负载的 10%,则它将在 5 分钟后关机。我的 Proline UPS 也存在同样的问题。只要在 UPS 上增加负载,它就不会关机。我知道,如果你想节省电池电量,这有点违反直觉。
我找不到可以关闭该功能的软件设置。它似乎被硬编码到固件中。
我在负载侧安装了一个 sonoff 智能开关,并对其进行编程,使其每 4 分钟开启 10% 的负载 10 秒。虽然不是很优雅,但可以让 UPS 保持运行。