新人下载app,立即提现现金 您的好友 送你现金 去提现

非管理型UPS如何实现停电后NAS的自动关机脚本

Ai_GuiGui 17-11-09 关注

注:本文只适用于威连通的NAS,理论上来讲也是可以拿去其他LINUX内核的NAS下使用,但是具体的脚本内容还是需要做些修改。另外本文只是作为生活中的一点经验积累,如果有问题还请高手解答。

自从有了NAS后,就一直在想着给NAS配置一个后备电源,网上和张大妈家能找到最多的莫过于施耐德APC BK650-CH,但是价格已经不是当年的价格了,然后外观也不是很喜欢。所以在淘宝、京东逛了几天后就入了山特(SANTAK) 山特ET550,其实买这个第一是外观吸引了我,其他的也没啥优点就是一个普通的UPS,附加稳压和防浪涌功能,价格当时买的时候在300以内,现在来看也是在300左右浮动。

施耐德APC BK650 带管理功能,可以实现停电后自动关机:

APC BR550G-CN UPS不间断电源 330W/550VA UPS电源带电源管理功能,对UPS要求高的用户可以选择这款:

不差钱的建议入这款,虽说性价比不高,但是功能全啊,带稳压带USB带防浪涌带调压,简直就是为家用NAS生的。so,趁着双十一还没过完,有好价了就不要犹豫了。

山特(SANTAK) 山特ET550 550VA/300W非管理型的UPS,无法实现停电后自动关机的功能:

山特TG-E500 后备式ups不间断电源家备用电脑500VA/300W 不带电源管理功能也就是非管理型UPS:

入手了UPS就捉么着怎么实现停电后自动关闭NAS,在网上查了很多资料,最后总结加上自己的一点小智慧,最终实现了自己的NAS在停电后自动关机的功能。

对于不带USB口或者串口的UPS后备电源来说,断电后NAS自动关机只能通过检测路由器或其他网络设备来实现NAS的自动关机,从而来保护硬盘。所以写这个脚本的初衷就不是为了延长使用时间,而是为了在失去市电后通过UPS供电并自动关机来实现对硬盘的保护。

脚本通过计划任务周期性运行,在检查到外部网络设备停电关机后,NAS无法PING通被检测网络设备,以此来判断市电可能中断,然后脚本在检测到PING失败后,自动执行NAS关机指令,使NAS在UPS电源电池耗尽前安全关机,不至于突然断电造成硬盘磁头归位的情况。但是这样做有个缺点是NAS关机后,在市电恢复后,无法实现自动开机,只能通过路由器远程唤醒开机(远程唤醒这部分不在本文内涉及)。

基本构思基本构思

先看下脚本执行的情况吧:

脚本执行情况脚本执行情况

可以看到我标注的地方,在我认为的断电后,系统日志里面记录了我们在脚本里面设置的相关信息。

脚本1,这一部分主要是用来ping被检测的网络设备是否掉线的,如果被检测设备通信正常,则向日志内写入电源正常并退出,如果通信不正常,则在等待延时结束后跳转去执行脚本2:

脚本1脚本1

在经过脚本1的延时后,进入脚本2我们再次进行PING被测网络设备看通信是否正常,如果正常就向系统日志内写入相关信息说可能出现过断电的情况并已经恢复,但是在我们延时的那个时间里没有恢复正常,则去执行关机指令使NAS关机:

脚本2脚本2

第一个脚本是用来检测是否停电,第二个是用来再次检测主机,看电源是否恢复,如果恢复了就不再执行关机操作。其中黄色标注的地方是需要注意的一些地方,错了恐怕脚本就不能执行了。

IP= 后面的就是你要检测的挂在市电下的网络设备,可以是路由器也可以是无线网关比如小米的智能电源插座电视盒子什么的。前提是需要给检测的设备在路由器里面手动给指定IP(此处由于篇幅问题不在本文内涉及),这样才不会发生设备重启后,被检测设备因DHCP服务而造成把IP分配给其他设备。
检测时间,根据自己UPS的性能,自己拿捏着设置就行了。

本来想把脚本写成一个文件进行执行的,但是写完后发现执行不了,可能问题出在了IF语句的嵌套上面,所以就老老实实的分成了两个文件来写,脚本写的比较粗糙,注释什么的都是当时写的时候注的,后来脚本修改了几次,注释也就没改。纯粹的业余小白,高手勿喷。

拿到脚本后如何使用:

下载脚本后用WINSCP上传到NAS的硬盘目录下,不上传到/usr/sbin是因为重启后添加进去的脚本就被删除了。所以自己找个目录放进去然后把目录地址记下来。
比如我放在了NAS的第一块硬盘里,自己建的一个POWER文件夹里。

如下图黄色标记处路径信息:

WINSCPWINSCP

然后双击打开上传后的脚本文件用WINSCP自带的编辑器修改检测主机的IP和时间,最后保存。编辑器界面和需要修改的地方如上面的脚本1和2的截图内黄色标记的地方。

文件权限设置文件权限设置

完了后右键单击脚本文件,选择属性,检查文件权限,按图设置权限即可。

由于威连通没有提供自定义计划任务的地方(这个是值得吐槽的地方,这一点没有群辉做的好)所以我们只能通过WINSCP来修改计划任务配置文件,来增加新的计划任务,来让NAS运行我们的检测脚本。

设置计划任务设置计划任务

威连通的计划任务配置文件在/etc/config文件夹下,进入后找到crontab文件打开,添加计划任务:
*/5 * * * * sh /share/CACHEDEV1_DATA/power/powerfail
从SH 后开始一直到/powerfail中间的文件路径加粗的地方需要替换为你自己的路径,5 代表每5分钟执行一次POWERFAIL脚本
最后点保存后,进日志管理器里面看看是否已经有相关的检测信息在了。如果没有可以用putty连上NAS的终端,在终端里面直接运行脚本看是否正常。有错误根据提示修改就可以了。

最后如果不想每隔几分钟就向系统日志内写入电源正常的信息提示,可以在脚本1里面write_log "AC Power OK!"这条语句前面加一个#号并保存就可以了。


脚本下载链接:
链接 密码: frfz

WINSCP下载链接:
链接 密码: hgsu


未经授权,不得转载

展开阅读全文

打开App,享最佳阅读体验
全部评论 (54)
Ai_GuiGui
4
2019-07-05
DreamerYY: 自动开机好解决啊,主板BIOS电源管理设置来电自动关机就行了 1

我的威连通不支持来电自动开机功能。至于电脑主板,估计也不大好用吧,因为电脑自动关机后,UPS里肯定还是有电的吧,如果在UPS电源耗尽前来电了,主板肯定是不会自动开机的,对吧。

Mars_V
4
2017-11-10

我之前想过一个方案……ups的工作灯接继电器……当UPS的指示灯切换到电池时继电器接通nas的电源……然后关机……来电的时候UPS的指示灯切换到市电……重新启动UPS……原来还能用脚本啊…………

lendlice
4
2017-11-09

我的gen8装的server2012 类似操作 新建一个后台任务 写入命令 当网卡物理断网时就自动倒计时3分钟后关机 如果期间网络恢复 自动取消关机 。配合一个山特TG500,顶住好几次意外断电。

Ai_GuiGui
1
02-24 23:26
坟都的鼠子: 唉……也是刚买了nas后找ups找到这里的,nas还没到手就又要花钱了,usb和lan通信确实很难简单实现,也没有找到同类型的模块,文中确实没有投入就能实现,本来想着如果nas有个输入端,直接检测电平高低就能控制关机就好了,等451到手了,打算研究一下开关机的按钮,如果短按就能像笔记本一样实现关机动作,能买到相应的可编辑继电器模块三十几块,也省的组装单片机检测就越来越麻烦了,ups打算直接在12vdc电源并入大容量法拉电容实现,优点就是结构简单,重量能轻一点,寿命应该比较长,也没有噪音,缺点会贵一点,真的好懒不想动…… 1

兄弟别折腾了,一步到位吧,直接买个山特的那个NAS专用的UPS,也就不到500块钱,比我文章里的UPS强多了。加UPS的目的是失电后可以安全关机,不要想着用这个UPS来长时间带负载。还有需要注意一点,UPS要定期放电,保持电池的活性,我的两个UPS就因为平时很少停电,电池长时间不放电没有活性给放坏了,等真的停电的时候才发现电池带不动了[喜极而泣]换电池换的肉疼

ELaplace
1
2020-07-07
Atjl: 脚本改造了下,加了些配置参数,有兴趣的可以参考 https://blog.csdn.net/asynct/article/details/103826950 1

路由禁ping。第一个方法,nas ping自己行不行?第二个方法,获取nas双网卡的ip并判断是否包含nas分配的ip,若两个网卡都没包含指定ip这段字符,自然就关机,这个行不行?

Atjl
1
2020-01-04

脚本改造了下,加了些配置参数,有兴趣的可以参考 https://blog.csdn.net/asynct/article/details/103826950

大兔子君007
1
2017-12-15
大兔子君007: 思路不错,但是脚本写的太麻烦了。我觉得思路应该是,写个循环,用一个计数器,每一次ping失败,计数器+1,如果ping成功,计数器清零。每次ping完,休眠一会儿。如果计数器达到阈值就关机了。刚看了半天没看懂为什么搞两个脚本。 1
大兔子君007: 另外ping那里取ping返回的错误值,这种不太合理,应该是取ping值的结果,取丢包率,如果100%判断为网络故障。 2
展开隐藏评论
Ai_GuiGui: 用两个脚本是因为,没有搞懂IF语句的嵌套关系,最开始是把两个脚本写在一起的,但是发现它只执行前面的检测,检测失败后自动关机的部分不起作用,也没深入研究,就分开写了两个脚本配合起来使用。其实我也明白,那个暂停命令是相当于后台一直处于激活状态的,当时没有考虑那么多,另外太复杂的脚本也写不来,只能看别人的脚本比葫芦画瓢那样写了。至于PING的取值,脚本里面进行了二次判断,就是第一次ping失败后,会隔一段时间再次PING一下,来确认设备是不是真的断开了。如果第二次同样PING失败了,才会去执行关机指令。PING的设置里面加入了PING的次数参数COUNT,可以增加PING的次数,结果返回的是最后一次指令是否执行成功的结果。取丢包率不知道怎么做[内伤] 还有一个缺陷就是,NAS不停的PING主机,如果路由器开启DDOS攻击防御的话,NAS的IP会被路由器加入黑名单,造成所有的PING都是失败的,使得NAS刚开机几分钟就自动又关机了。我的前段时间就出现了这个情况,后来把R7k的固件更新到最新的,把DDOS功能关掉重新开启后,正常了。2周了暂时还没发现有啥问题。 3

其实ping自己的内网IP也可以的,反正路由器断电,Nas ping自己也ping不同。看到你这个我也打算买个便宜的ups玩玩了,谢谢[棒棒哒][赞]

逝去岁月
1
2017-11-11

没办法自动开机,是个麻烦事啊。。。

psp6670
0
02-28 16:08
psp6670: 首富家买的APC BR550G-CN二手没电池,单独买电池,一共用了300元 1
坟都的鼠子: 能不能用法拉电容替代电池?寿命长。 2

法拉电容要自己组装,还要平衡充,成本不低啊

坟都的鼠子
0
02-26 13:23
psp6670: 首富家买的APC BR550G-CN二手没电池,单独买电池,一共用了300元 1
坟都的鼠子: 能不能用法拉电容替代电池?寿命长。 2
展开隐藏评论
Ai_GuiGui: 威连通的系统光关机就要5到10分钟,我觉得不行,充放电电路不一样。 3
坟都的鼠子: 错了是不间断电源 4
Ai_GuiGui: 嗯,我的UPS这周末准备发回厂家换电池,还好还在质保期内。要不然还要自己折腾换电池[倒地]刚买回来的时候带R7K路由和光猫能带1个小时不是问题,现在呵 呵了,1秒钟都不行。 5

这东西还是定期找个200瓦灯泡试一下待机时间,免得等真正用的时候趴窝了。

打开App,查看更多好文和评论
文中商品
最新其他电脑配件优惠
ALLOYMODERNIST 合金水冷 透明银 显卡6+2PIN通用电源延长线  25cm
ALLOYMODERNIST 合金水冷 透明银 显卡6+2PIN通用电源延长线 25cm

绝缘耐热 透明发光

24.9元
京东 04-09
1 100%
猜你喜欢
查看更多
相关好价
相关商品
查看更多热门商品
社区主页 文章详情
46
360
54
你已经点过赞了
新浪微博 QQ空间 微信好友 豆瓣
当前为触屏版
热门搜索