在 Debian 服务器上,我已成功安装了该nut
软件包,以便可以通过 USB 获取我的 Ellipse PRO 1200 UPS 的状态(upsc my-ups
返回电池电量)。
注意:我还没有测试停电时会发生什么。
此 UPS 为除此 Debian 服务器之外的其他设备供电:一些路由器/交换机和 NAS。
在这种情况下,考虑到我认为 NUT 的工作方式,我应该在 NAS 上安装 NUT 并将其声明为 NUT 从站,这样 Debian 服务器(NUT 主站)会在电池电量低时命令 NAS 关闭,然后自行关闭.
问题是我无法在 NAS 上安装 NUT(不支持操作系统),但我可以通过 SSH 连接到它并告诉它关闭。
我如何/在哪里可以将我自己的脚本与通常运行的 NUT 一起放置以命令它从属关闭?
我唯一能找到的地方是SHUTDOWNCMD
在/etc/nut/upsmon.conf文件中:
SHUTDOWNCMD "/sbin/shutdown -h +0"
Run Code Online (Sandbox Code Playgroud)
我猜我可以用一个手工制作的脚本替换这个命令,该脚本将运行该 SSH-shutdown-command 并以关闭 Debian 服务器结束。
问题SHUTDOWNCMD
似乎是针对最后一次操作的:当电池电量非常低时。在我自己的脚本中联系所有其他设备可能需要比电池耗尽之前更多的时间。
谢谢
小智 8
您可以尝试upssched.conf(5)
在事件触发后在计时器上运行您自己的脚本。
基本upssched.conf
是这样的:
CMDSCRIPT /bin/your-script.sh
AT ONBATT * EXECUTE emailonbatt
AT ONBATT * START-TIMER upsonbatt 300
AT ONLINE * EXECUTE emailonline
AT ONLINE * CANCEL-TIMER upsonbatt upsonline
Run Code Online (Sandbox Code Playgroud)
有了这个,NUT 将:
/bin/your-script.sh emailonbatt
。/bin/your-script.sh upsonbatt
。/bin/your-script.sh emailonline
。upsonbatt
如果计时器仍处于活动状态,也应立即取消该计时器。否则,运行/bin/your-script.sh upsonline
.该脚本可能类似于:
#!/bin/bash
case $1 in
emailonbatt)
mail -s "UPS on battery power" your@email.com
;;
emailonline)
mail -s "UPS on line power" your@email.com
;;
upsonbatt)
ssh root@nas shutdown -h +0
;;
upsonline)
etherwake 01:23:45:AB:CD:EF
;;
esac
Run Code Online (Sandbox Code Playgroud)
AT 语句的语法可以在 for 的手册页中找到upssched.conf(5)
,可用的通知事件类型可以在 for 的手册页中找到upsmon(8)
。
你想要做的(使用预先建立的钩子)是最优雅的方法。
但是,当由于没有钩子或钩子不适合您的需求而无法做到这一点时,轮询方法也是一种选择。
您可以在文件中监视 NUT 组件的输出/var/log
。
例如,我的(Debian 7 上的 Salicru UPS)记录了以下内容:
10 月 28 日 13:37:49 主机名 upsmon[1766]:UPS salicru@caramon 电池供电
当 UPS 切换到电池时,这
10 月 28 日 13:39:39 主机名 upsmon[1766]:UPS salicru@caramon 在线电源
当电源恢复时。
您可以模拟电源故障,查看日志消息,然后编写一个每分钟(或 5 分钟)运行一次的 cron 作业,在日志中查找这些行并执行您想要的操作。