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

2017-11-09 14:45:31 52点赞 431收藏 57评论

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

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

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

APC BK650-CH 不间断UPS电源/400W/650VA UPS电源509元400W,路由器和猫单独供电半个小时不是问题京东去购买

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

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

APC BR550G-CN UPS不间断电源 330W/550VA UPS电源892元APC的家用高端货,站内有晒单的,带液晶屏,带稳压和防浪涌,功能家用很OK,理想的NAS伴侣京东去购买

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

山特(SANTAK) 山特ET550 ups不间断电源备用电脑稳压 550VA/300W333元300W带稳压和防浪涌,可惜不带电源管理功能,无法实现停电后自动关机功能,优点是便宜京东去购买

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

山特TG-E500 后备式ups不间断电源家备用电脑500VA/300W238元300W,不带稳压和防浪涌功能,同样也不支持电源管理功能,优点性价比高。京东去购买

入手了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


展开 收起

APC BK650-CH 不间断UPS电源/400W/650VA UPS电源

APC BK650-CH 不间断UPS电源/400W/650VA UPS电源

暂无报价 去购买

山特(SANTAK) 山特ET550 ups不间断电源备用电脑稳压 550VA/300W

山特(SANTAK) 山特ET550 ups不间断电源备用电脑稳压 550VA/300W

暂无报价 去购买

山特TG-E500 后备式ups不间断电源家备用电脑500VA/300W

山特TG-E500 后备式ups不间断电源家备用电脑500VA/300W

暂无报价 去购买

APC BR550G-CN UPS不间断电源 330W/550VA UPS电源

APC BR550G-CN UPS不间断电源 330W/550VA UPS电源

暂无报价

山特(SANTAK)机架在线式UPS不间断电源 服务器停电后备电源 标准内置电池 C1KR 1000VA800W内置电池标机

山特(SANTAK)机架在线式UPS不间断电源 服务器停电后备电源 标准内置电池 C1KR 1000VA800W内置电池标机

2238元起

APCSUA2200ICH配件

APCSUA2200ICH配件

3元起

APC 施耐德 键盘

APC 施耐德 键盘

1元起

APC 施耐德 键盘

APC 施耐德 键盘

3元起

APC 施耐德 键盘

APC 施耐德 键盘

3元起

APC ups不间断电源SURT1000XLI-CH机房网络设备稳压应急备用ups电源1KVA/900W替代SURT1000XLICH

APC ups不间断电源SURT1000XLI-CH机房网络设备稳压应急备用ups电源1KVA/900W替代SURT1000XLICH

4049元起

APC ups不间断电源SURT系列机架式电池包SURT48XLBP-CH机架高度2U适用SURT系列1-2K主机

APC ups不间断电源SURT系列机架式电池包SURT48XLBP-CH机架高度2U适用SURT系列1-2K主机

4169元起

APC ups不间断电源SYMIM4 UPS智能控制模块

APC ups不间断电源SYMIM4 UPS智能控制模块

26301元起

山特(SANTAK)C12-26 山特UPS电源电池免维护铅酸蓄电池 12V26AH

山特(SANTAK)C12-26 山特UPS电源电池免维护铅酸蓄电池 12V26AH

378元起

APC 施耐德 键盘

APC 施耐德 键盘

2元起

APC 施耐德 键盘

APC 施耐德 键盘

暂无报价

APC 施耐德 键盘

APC 施耐德 键盘

2元起

APC 施耐德 键盘

APC 施耐德 键盘

2元起

APC 施耐德 键盘

APC 施耐德 键盘

暂无报价

APC ups不间断电源SURT系列机架式电池包SURT192XLBP-CH机架高度3U适用SURT系列5-10K主机

APC ups不间断电源SURT系列机架式电池包SURT192XLBP-CH机架高度3U适用SURT系列5-10K主机

7738元起

APC ups不间断电源SURT系列机架式导轨SURTRK-CH适用SURT系列1-2K主机及SURT48XLBP-CH电池包

APC ups不间断电源SURT系列机架式导轨SURTRK-CH适用SURT系列1-2K主机及SURT48XLBP-CH电池包

1188元起
57评论

  • 精彩
  • 最新
  • 没办法自动开机,是个麻烦事啊。。。

    校验提示文案

    提交
    远程通过路由器唤醒,我目前是设置了自动开关机任务,停电关机后,等到下一个自动开机时间到了,就自动开机了。所以这个对我来说影响不是太大。

    校验提示文案

    提交
    GEN8好。。。主机shotdown以后可以进iLO去开机,虽然做不到自动开机,但是能实现远程开机了

    校验提示文案

    提交
    收起所有回复
  • 群晖脚本1的时间怎么修改没说说

    校验提示文案

    提交
    在脚本1里修改:time1=280;这一行。这个是延时时间,延时结束后去执行脚本2

    校验提示文案

    提交
    收起所有回复
  • 思路不错,但是脚本写的太麻烦了。我觉得思路应该是,写个循环,用一个计数器,每一次ping失败,计数器+1,如果ping成功,计数器清零。每次ping完,休眠一会儿。如果计数器达到阈值就关机了。刚看了半天没看懂为什么搞两个脚本。

    校验提示文案

    提交
    另外ping那里取ping返回的错误值,这种不太合理,应该是取ping值的结果,取丢包率,如果100%判断为网络故障。

    校验提示文案

    提交
    用两个脚本是因为,没有搞懂IF语句的嵌套关系,最开始是把两个脚本写在一起的,但是发现它只执行前面的检测,检测失败后自动关机的部分不起作用,也没深入研究,就分开写了两个脚本配合起来使用。其实我也明白,那个暂停命令是相当于后台一直处于激活状态的,当时没有考虑那么多,另外太复杂的脚本也写不来,只能看别人的脚本比葫芦画瓢那样写了。至于PING的取值,脚本里面进行了二次判断,就是第一次ping失败后,会隔一段时间再次PING一下,来确认设备是不是真的断开了。如果第二次同样PING失败了,才会去执行关机指令。PING的设置里面加入了PING的次数参数COUNT,可以增加PING的次数,结果返回的是最后一次指令是否执行成功的结果。取丢包率不知道怎么做 [内伤]
    还有一个缺陷就是,NAS不停的PING主机,如果路由器开启DDOS攻击防御的话,NAS的IP会被路由器加入黑名单,造成所有的PING都是失败的,使得NAS刚开机几分钟就自动又关机了。我的前段时间就出现了这个情况,后来把R7k的固件更新到最新的,把DDOS功能关掉重新开启后,正常了。2周了暂时还没发现有啥问题。

    校验提示文案

    提交
    还有2条回复
    收起所有回复
  • 运行硬盘里的脚本,会影响nas硬盘的自动休眠吧

    校验提示文案

    提交
    好像是吧,不太注意,我平时都是自动开关机。其他也没办法写到系统分区里,记得第一次就没写到硬盘里,重启后脚本就没有了。

    校验提示文案

    提交
    收起所有回复
  • 有联系方式,求助您个问题

    校验提示文案

    提交
    这里留不了联系方式,你有啥问题直接留言吧

    校验提示文案

    提交
    我是黑群晖系统,怎么用这个脚本,我看群晖的脚本都是sh结尾吧。

    校验提示文案

    提交
    收起所有回复
  • 自动开机好解决啊,主板BIOS电源管理设置来电自动关机就行了

    校验提示文案

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

    校验提示文案

    提交
    收起所有回复
  • 照着弄了,没有关机?我看日志里面每隔五分钟有一个power good的记录。拔掉网线以后,就没有这个记录了。但是也没有其他记录,也没自动关机。这是怎么回事?第二段脚本没有运行?

    校验提示文案

    提交
    链接: 去看看 提取码: c8dn
    最后整合后的代码。

    校验提示文案

    提交
    大佬为啥我用1和2脚本,能正常的用,但是如果用你这个新发的百度网盘整合后的代码就没用,咋回事呢。。。好郁闷!

    校验提示文案

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

    校验提示文案

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

    校验提示文案

    提交
    最后东家买了一个雷迪司的,不折腾了。

    校验提示文案

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

    校验提示文案

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

    校验提示文案

    提交
  • 脚本改造了下,加了些配置参数,有兴趣的可以参考 去看看

    校验提示文案

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

    校验提示文案

    提交
    第一个方法可行性大一点,网卡断开连接后,ping自己的IP是ping不通的。第二个方法太复杂,获取指定字符有点难。

    校验提示文案

    提交
    还有2条回复
    收起所有回复
  • 熬好,相当厉害。正找解决方案呢。谢谢楼主

    校验提示文案

    提交
  • 可以的,这个很厉害了

    校验提示文案

    提交
  • 这个相当可以,收藏。

    校验提示文案

    提交
  • 这招不错……很巧妙 [赞一个]

    校验提示文案

    提交
  • 首富家买的APC BR550G-CN二手没电池,单独买电池,一共用了300元

    校验提示文案

    提交
    可否来个关键词

    校验提示文案

    提交
    能不能用法拉电容替代电池?寿命长。

    校验提示文案

    提交
    还有7条回复
    收起所有回复
  • 300元以下可以考虑入手一个

    校验提示文案

    提交
  • 这个相当可以,收藏。

    校验提示文案

    提交
  • 为你点赞,也希望能抛砖引玉吸引来更多大牛的教程

    校验提示文案

    提交
  • 技术型马可下

    校验提示文案

    提交
提示信息

取消
确认
评论举报

相关好价推荐
查看更多好价

相关文章推荐

更多精彩文章
更多精彩文章
最新文章 热门文章
431
扫一下,分享更方便,购买更轻松