如何指定要在电源和网络故障的情况下使用NUT关闭之前要运行的命令?

问题描述 投票:1回答:1

我有一个带有USB插入式UPS的NAS。我在树莓派上安装了螺母客户端(仅客户端)以监视UPS。我必须将UPS插入NAS,因为它是识别我的UPS的唯一设备(不幸的是,这是中国通用的通用设备)。无法使其直接插入树莓派。因为我只在树莓派中安装了螺母客户端,所以/ etc / nut是空的。我已经创建了3个文件:

nut.conf

MODE=netclient

upsmon.conf

MONITOR login@nas_ip 1 admin password slave
SHUTDOWNCMD "/sbin/shutdown -h now"
NOTIFYFLAG ONBATT SYSLOG+WALL+EXEC
NOTIFYFLAG ONLINE SYSLOG+WALL+EXEC
NOTIFYCMD "/etc/nut/notifycmd"

notifycmd脚本:

    #!/bin/bash
#
# NUT NOTIFYCMD script

PATH=/sbin:/usr/sbin:/bin:/usr/bin:/usr/local/sbin:/usr/local/bin

trap "exit 0" SIGTERM

if [ "$NOTIFYTYPE" = "ONLINE" ]
then
        echo $0: power restored | wall
# curl command to send me a sms
        # Cause all instances of this script to exit.
        killall -s SIGTERM `basename $0`
fi

if [ "$NOTIFYTYPE" = "ONBATT" ]
then
        echo $0: 40 minutes till system powers down... | wall
#curl command to send me a sms
        # Loop with one second interval to allow SIGTERM reception.
        let "n = 2400"
        while [ $n -ne 0 ]
        do
                sleep 1
                let "n--"
        done
        echo $0: commencing shutdown | wall
        sleep 10
        upsmon -c fsd
fi

我的UPS具有强大的功能,可以等待40分钟,然后再远程关闭nas和树莓。断电和恢复供电后,我会收到一条短信。

但是有一个特例:如果覆盆子在用电池供电时失去与ups的连接,覆盆子几乎立即关闭...我认为这是一种保护行为,但是我想插入curl命令会在关机前发送短信,例如“断电和连接失败并出现故障”(我知道命令本身,这不是问题)我知道我必须在upsmon.conf中添加“ DEADTIME”或“ NOTIFYFLAG NOCOMM”或“ COMMBAD”之类的内容,但不确定该选择什么。我必须在“ notifycmd”文件中添加什么?

谢谢

bash raspberry-pi2 shutdown
1个回答
0
投票

如果您认为这对您的Raspberry Pi有好处,则可以提高DEADTIME的值。来自最近的upsmon.conf:

# upsmon requires a UPS to provide status information every few seconds
# (see POLLFREQ and POLLFREQALERT) to keep things updated.  If the status
# fetch fails, the UPS is marked stale.  If it stays stale for more than
# DEADTIME seconds, the UPS is marked dead.
#
# A dead UPS that was last known to be on battery is assumed to have gone
# to a low battery condition.  This may force a shutdown if it is providing
# a critical amount of power to your system.

如果您确定UPS可以为Raspberry Pi装上足够的电池(即使您无法与之交谈,则可以将DEADTIME设置为120(2分钟),甚至300(5分钟)。请记住,该值应该是POLLFREQ和POLLFREQALERT的倍数。

此后,upsmon将有更多时间运行您的NOTIFYCMD。现在,只需为COMMBAD添加一个保护套:

  • 只要通讯中断,就会触发COMMBAD
  • 只要恢复通讯就触发COMMOK
  • 只要一段时间未恢复通信,便会触发NOCOMM

此外,请考虑将NOTIFYCMD仅仅用于通知某些内容,而不要执行肮脏的工作(例如,关闭系统)。

© www.soinside.com 2019 - 2024. All rights reserved.