单UPS支持多nas设备
追加修改(2020-08-24 08:38:09):
关于那两个脚本,我这边上传到网盘了,有需要的自取链接 提取码: 4wyk
自己修改powerfail2对应的路径
前言
第一次投稿,排版混乱敬请原谅, 非常感谢各路大神给的灵感及方法
家里原来有个黑群晖,为了数据安全买了一个ups,型号为 APC的BK650,
这款ups基本上算是很多人的选择了,兼容性不错,连上群晖能够自动识别并实现断电通知
但这款ups有个问题,它是通过usb线通知nas的,并不是snmp之类的网络协议,只能通知连接的设备,若只有一台nas,或者是同品牌的nas到是没啥大问题,不过有两台以上的不同品牌(系统)的nas就会出现不能通信的情况。
然而我就购买了一台qnap,现在问题来了, 这两台设备总有一台不能连上ups,导致ups耗完电直接断电,失去了保护的意义
现在的需求就是在断电时能够让两台(或更多)的设备能够安全的关机,经过一段时间摸索,基本上实现了,大概有两种方法
PING网关
这是一种比较简单的方法,也算是比较容易的,基本思路是做一个定时任务,不断地ping网关,ping不通的话就认为已经断电,然后执行关机命令,这种方法网关不能连接到ups上。
站里已经有人实现过了,不过他用的qnap
我这边写下群晖的用法,利用群晖自己的定时任务, 脚本稍微有些改动
首先我们有两个脚本文件,powerfail1 和powerfail2
powerfail1脚本
该脚本做了几件事
1. 根据设定的时间间隔执行ping命令,并获取ping命令的返回值
2. 判断ping返回的信息,如果正常,不做其他事
3. 如果返回数据不正确,则在指定时间后执行powerfail2脚本
powerfail2脚本如下
powerfail2脚本做了几件事
1. 再次尝试ping网关,目的是防止网络波动导致异常关机
2. 判断ping返回的信息,如果正常,不做其他事
3. 如果不正常,则执行关机操作
将上述两个脚本文件拷贝进nas,路径自选
ssh进入群晖,找到刚才添加的文件,chmod+x 添加执行权限
进入群晖管理界面,控制面板-任务计划-新增-计划的任务-用户自定义脚本
随意输入名字,注意不能有中文,选择计划选项,设置每天的每一分钟运行一次(可根据具体情况调整)
选择任务设置,在用户自定义脚本里输入刚才上传的脚本绝对位置,我的脚本放在第一块共享硬盘的power文件夹中,所以路径为/volume1/power/powerfail,其中powerfail为脚本名
注意powewrfail脚本中的powerfail2的路径要与实际路径一致
然后就可以拔掉网线测试下了,一般1-3分钟内会关机,这就基本实现了需求
该方法比较简单,只需要两个脚本即可完成,事实上这种方式适用很多场景,例如有的ups根本没有通信功能,只要有ping命令和定时任务就这种方式就可以,缺点在于所有判断都是靠ping实现的,遇到网络波动,或不小心取下网线、或网关断电等都会导致nas关机,虽然我们在脚本里面加了二次检查,能够避免部分情况。
NUT
NUT即Network UPS Tools, 也是目前比较通用的ups网络通信软件,分为服务端和客户端
好消息是包括qnap和群晖都用的是nut实现的网络间断电通知, 坏消息是他们用的名字和密码不一样,导致两者之间不能通信
所以基本的思路是通过修改某一方的nut配置实现两者间的通信,最终达到目的,这一思路在群晖和其他nas系统比如unraid、omv上比较好实现,思路就是安装nut,配置好用户名密码符合群晖的要求即可,站里也有人实现了群晖和unraid共用ups,例如
不知道是威联通折腾的人少还是什么,qnap在这方面的文章就比较少了 ,然而前段时间453bmini降价,就入了一个,现在问题来了,我需要在这两个品牌之间实现断电通知
事实上我之前按照前面的方式已经试过了,并且能够正常使用,然而用着总是有些不爽。。。有时候重启个路由nas都能关机。。。。
所以就花了点时间折腾了下NUT
思路很明确,就是修改某个nas的NUT配置,这里我的威联通的白的,不想对系统做过多修改,所以就修改黑裙了
首先在qnap接入ups,在管理界面找到控制台-外接设备-ups
启用网络不间断电源服务器,这一步是让qnap这边成为nut的服务器
下面将群晖或其他需要加入的设备添加进下面的地址列表中,这儿实际上也是一个访问控制,如果对应的ip没有加入,另一边的client就连不上
然后应用即可,qnap这边算是完成了
然后进入群晖的管理界面
控制面板-硬件和电源-不断电系统
选择启用ups支持,类型选择synology不断电系统服务器
等待时间自己选择
ip地址输入刚才的qnap的ip
应用即可,这里会提示无法创建联机,先不管
ssh进入群晖,
cd /usr/syno/etc/ups/
/usr/syno/etc/ups/ 这个路径是群晖的nut配置路径
可以看到有ups.conf、upsd.conf、upsd.users、upsmon.conf 等文件
具体各文件大致作用如下(我的理解,不完全准确,看了半天,头都看晕了)
ups.conf 配置驱动
upsd.conf 配置ups服务
upsd.users 配置ups服务的用户
upsmon.conf 配置ups的监控程序
这里我们将群晖作为客户端,只需要修改upsmon.conf即可
使用vim或其他编辑器打开upsmon.conf
找到MONITOR 这一行,大概在87行左右的位置
刚才我们在群晖管理页面上操作的结果就是向这个配置文件中添加了这一行,这句话是添加了一个监听的ups服务器
格式:MONITOR ups@{UPS 服务器地址} {可用 UPS 数量} {用户名} {密码} {设备模式}
这里第一个坑出现了,大部分ups的服务器以ups开头(包括群晖),然而qnap不是,他是以qnapups开头。。。。
所以这一行改为
MONITOR qnapups@192.168.99.10 1 admin 123456 slave
解释下,qnapups@为固定开头,后面的ip的服务秀地址,1是数量,admin是qnap的用户名,123456是密码 slave是指作client模式
实际上这儿能看出来,群晖默认的是
MONITOR ups@192.168.99.20 1 monuser secret slave
用户名为monuser,密码为secret
如果以群晖为服务器,其他客户端就修改为上面这个就行
然后保存退出
执行upsc qnapups@192.168.99.10
这个是检测nut服务器网络是否正常,网络正常的话能看到一串输出
这实际上就是qnap作为服务器提供的ups信息
如果出现错误
就需要检查下网络,或这qnap管理界面的配置是否将群晖加入通知ip列表中
然后就可以了吗?
。。。。。并不行
实际上修改配置之后是需要重启生效的,然而你在群晖的管理界面开关一次试下,你会发现仍然不行,查看upsmon.conf 发现MONITOR配置仍然是
MONITOR ups@192.168.99.10 1 monuser secret slave
这就很蛋疼了,不重启不能应用,重启后恢复原样。。。。。感觉走进了死胡同
本以为行不通时,追踪发现群晖重启upsmon服务是通过
/bin/sh /usr/syno/etc/rc.sysv/ups-net.sh stop/start 来执行的
直接找到该服务,发现位于
/usr/syno/etc.defaults/rc.sysv/ups-net.sh
vim打开ups-net.sh,
很明显是个服务脚本
这就比较好办了 ,稍微看下
如图,大概在48与60行处,能看到salve开启的动作,通过sed向配置里写入MONITOR信息
那应该就是这儿了,修改为
qnapups@${UpsmonServer} 1 admin 123456 slave
其余不变,保存退出
现在我们到群晖界面重启ups支持,查看下upsmon.conf
发现已经自己变成了qnap的地址了,这下就不需要每次进来都配置了,并且能够生效
然而界面上还是
还是没成功吗?
在群晖的服务器查看下日志
sudo cat /var/log/messages
能够发现已经连接上了
再ssh进入qnap,输入命令
upsc -c qnapups@127.0.0.1
得到一个ip,这个ip就是群晖的ip,说明已经连接上了
从日志来看的话应该是已经成功了,让我们试下呢
断开ups电源,qnao、群晖收到提醒
1分钟(我设定的60秒)后,群晖进入安全模式
大功告成
。
。
。
。
了吗?
并没有完全成功,我们可以看到,群晖默认的是进入安全模式,也就是界面上说的卸载所有硬盘,但系统还是在运行,知道ups没电就突然断电关机。。。。
这就不符合我们的初衷,虽然说硬盘卸载了,但突然断电关机还是挺吓人的,那有什么办法呢
百度一下已经有人给出了答案
我这边大概写下流程
重启后还是去查看日志
sudo cat /var/log/messages
搜索ups,能看到这些
说明是synoups这个程序输出的信息,找到这个程序
位置/usr/syno/bin/synoups
按字符串Server is going to Safe Mode. 搜索
大概在141行左右
可以看到在进入到安全模式
我们要做的就是替换为关机命令即可
注释掉那几句,添加poweroff,保存
再次测试,成功关机。。。。。撒花
重启后再次查看日志
自动连接nut服务器成功,所以成功搞定,一劳永逸
至于界面上为什么还是显示未连接就不太清楚了,可能通过额外的心跳查询的?暂时没空弄了,反正目的达到了,以后有空在折腾吧
以上在我的黑群晖6.1.7,qnap4.4.3上测试通过,白群晖应该也行
至于另外的系统的nas就更简单了,通过仓库或编译安装nut,然后配置upsmon.conf的服务器为qnap,添加被通知的服务器的ip,重启服务,搞定,想要接几台就接几台。
DeepRed007
校验提示文案
旧手机换盆
校验提示文案
ELaplace
校验提示文案
就是个大白
校验提示文案
Helmuth
校验提示文案
大伙都夸我帅
校验提示文案
roubaozi1
校验提示文案
值友1110721363
后面黑群就连不上了,怎么破?
校验提示文案
yuipon
全部照教程来
然后最后一步读log的时候内容是
2021-01-10T10:11:23+08:00 Synology upsmon[28086]: Startup successful
2021-01-10T10:11:23+08:00 Synology upsmon[28088]: Login on UPS [qnapups@192.168.1.51] failed - got [ERR ACCESS-DENIED]
2021-01-10T10:11:28+08:00 Synology upsmon[28088]: UPS [qnapups@192.168.1.51] connected
然后威联通里输入upsc -c qnapups@127.0.0.1也没有任何提示
接下来该如何操作?
校验提示文案
yuipon
校验提示文案
OluMel7
校验提示文案
值友8358307440
校验提示文案
digie
校验提示文案
小虫黑龙
原语句是:
$SYNOBOOTBIN --set-safe-shutdown
# we should hook synopoweroff not only reboot
/usr/syno/sbin/synopoweroff -fr
按照大神方法,修改成:
$SYNOBOOTBIN --set-safe-shutdown
# we should hook synopoweroff not only reboot
# /usr/syno/sbin/synopoweroff -fr
poweroff
断电后进入安全模式,恢复供电,不会重启,好郁闷啊
校验提示文案
张叔叔
校验提示文案
希望你也是
校验提示文案
旧手机换盆
校验提示文案
浮生行简
校验提示文案
yxhr111
校验提示文案
旧手机换盆
校验提示文案
小虫黑龙
原语句是:
$SYNOBOOTBIN --set-safe-shutdown
# we should hook synopoweroff not only reboot
/usr/syno/sbin/synopoweroff -fr
按照大神方法,修改成:
$SYNOBOOTBIN --set-safe-shutdown
# we should hook synopoweroff not only reboot
# /usr/syno/sbin/synopoweroff -fr
poweroff
断电后进入安全模式,恢复供电,不会重启,好郁闷啊
校验提示文案
digie
校验提示文案
值友8358307440
校验提示文案
OluMel7
校验提示文案
神勇奥特曼
校验提示文案
yuipon
校验提示文案
yuipon
全部照教程来
然后最后一步读log的时候内容是
2021-01-10T10:11:23+08:00 Synology upsmon[28086]: Startup successful
2021-01-10T10:11:23+08:00 Synology upsmon[28088]: Login on UPS [qnapups@192.168.1.51] failed - got [ERR ACCESS-DENIED]
2021-01-10T10:11:28+08:00 Synology upsmon[28088]: UPS [qnapups@192.168.1.51] connected
然后威联通里输入upsc -c qnapups@127.0.0.1也没有任何提示
接下来该如何操作?
校验提示文案
值友1110721363
后面黑群就连不上了,怎么破?
校验提示文案
roubaozi1
校验提示文案
UC新闻震惊部
校验提示文案
大伙都夸我帅
校验提示文案
大伙都夸我帅
校验提示文案
Helmuth
校验提示文案
就是个大白
校验提示文案
ELaplace
校验提示文案
RemonKing
校验提示文案
旧手机换盆
校验提示文案
旧手机换盆
校验提示文案
yxhr111
校验提示文案
DeepRed007
校验提示文案