• 手机版
    手机扫一扫访问
    好4K手机版
  • 公众号
    微信扫一扫关注
    好4K公众号
ZhiYou666666 发表于 2019年7月31日 18:40:41 | 显示全部楼层
教你怎么NAS+非智能UPS让NAS自动关机的方法教程

一、前言
上次我写了篇入门nas我是如何保证数据安全的,有人对ups比较关心,但是我发现可以通知nas关机的都比较贵,因此我萌生了一个想法,普通的ups比较便宜,我能不能侧面的实现以下停电后自动关机?

nas上的3种ups选项,都是要花银子的智能ups,这样才能通知nas开机、关机
花银子?这明显违背了我值(又)友(穷)的精(又)神(抠),于是经过我开始了我的测试之旅,最后敲定的方案是:nas通过ping路由器来判断路由器是否断电,如果不通则有可能是断电了,要准备好给nas关机,说起来就是一句话,实现起来却要避开一些问题,比如说路由器波动导致ping不通?或者我手动重启了路由器,短时间ping不通了怎么避免?等等一系列问题如何去避免“非停电”情况下的重启呢?
首先打个预防针,目前我这方案并不完美,还存在一个未解决(但不是不能解决)的缺陷问题,文末我再说出来。
希望值友读了本文后可以发散思维,想出更好的方式,本文需要具有一定linux基础的朋友可以尝试。
二、详细过程
首先要实现上面的方案,我们需要在nas上运行一段代码,这段代码负责ping路由器,如果通就ok,如果不通就通知nas关机。这段代码可以是任何语言开发(前提是你nas的配置足够高),由于我这入门级的nas,配置那是相当的捉鸡,我就决定用linux的shell来写这段命令。
先简单给不懂linux的朋友讲解一下吧(其实我对linux也不熟悉,每步操作都要去百度),linux和windows一样,都是操作系统,linux也可以像windows一样拥有图形化的操作,通常一些性能不高的设备(路由器或者入门级的nas)就会采用linux,他比起windows而言,内存cpu要求更低(就是低配置也可以流畅运行)。因此我这个方案的实现本质就是写一段linux可以执行的命令(类似在windows上写了一个bat文件)。
好了,既然linux也是操作系统,那我们怎么连上去操作呢?接下来就正文了,我尽量简单的描述、讲解各个步骤。
1.准备好两个工具,putty和winscp,他们的作用是什么?

putty你可以理解为widnows的cmd,用来在linux系统中执行命令
winscp可以理解为windows的资源管理器,用来连接到linux之后,可以图形化访问linux系统中的文件,方便我们拷贝、查看。
这两个工具在互联网上很容易就搜出来了,我不过多说了。
2.首先打开putty,输入nas的ip地址,端口保持默认不变

3.点击ok之后就打开一个类似我们平时使用的cmd的界面,按要求输入账号,admin就是我nas的登录账号(威联通,群辉未知)

3.回车之后又会要求输入密码,这个密码输入光标不会动,字符也不会显示出来,不用管,你直接输入回车就行了

4.如果账号密码没有错误就会进入到这个状态,这就代表登录成功了

5.输入cd /opt/ 进入到/OPT目录下,这个目录一般在linux上用来存放我们自己的软件,先放这里吧

到这里之后,putty窗口先放着,我们去打开另一个软件
6.打开winscp,选择新建站点,在主机名输入nas的ip地址、账号密码

7.登录成功后,进入/opt目录,将autoShutdown.sh拷贝进去(这个sh文件别急,我马上就讲)

8.在桌面新建一个txt文件,重新命名为autoShutdown.sh,右键用记事本打开,然后复制下面这段代码拷贝进去
ps:注意里面的shutdown -h now前面我加了井号,这行命令就暂时不会执行,这行命令是关机命令,注释他是因为我们还需要调试这些命令是否会如预期执行,避免有问题还把nas关闭就不好了
讲一下这段命令中的3个关键项,如果你要用着3个地方要修改一下:
ip="192.168.1.1" 这个就是你的路由器ip地址,简单的说这个地址ping不通就代表可能停电了
time=60 这个间隔时间,单位秒,两次ping间隔60秒,太频繁也不好,因此间隔60秒比较合适
restartCnt=10 这个是ping不通路由器的时候算一次连接失败,当连接失败次数超过这个数值则认定为停电了,通知nas关机。可以避免因为我们重启路由器之类的短时间ping不通nas也关机了。restartCnt和time建议不要设置小了
默认的这两个数值,间隔60秒执行一次,连续10次都不通的话就是10*60=600秒,意思就是10分钟路由器都不通则关闭nas。10分钟或者20分钟我觉得都是比较合适的。
9.这个时候,我们再putty输入vim autoShutdown.sh, vim命令是编辑,实际我们编辑可以在winscp里面右击编辑,比命令方便多了。在这里输入vim 进入编辑是为了修改文件的格式,因为我们的文件从windows拷贝进去,很可能格式是dos,需要修改为unix。


打开后看到文本内容了,什么都不要做,按下shift+:进入命令模式

在命令下输入 set ff=unix,回车
然后再次按下shift+:进入命令模式,输入wq,回车。wq的意思就是写入、退出,回车之后就退出编辑器了。
10.又切换到winscp来,在autoShutdown同目录下创建一个文件,取名“switch”


右击创建的文件,编辑,在里面输入一个1
这个文件就是一个简易开关,以后不想用的时候,把里面的内容改为0,保存,重启就不会再检查路由器能否ping通了。这个就是一个开关,根据内容,如果是1程序就生效,如果是0程序就不生效。
ps:如果路由器ip变了,要在开机10分钟内(前面设置的time*restartCnt 秒)把这个文件删除或者修改内容为0.然后重启,否则每次开机就会10分钟关闭,如果你要用我这个方案,我想应该也是有点动手能力的,应该不难吧?
11.工作基本上结束了,我们来运行一下,输入./autoShutdown.sh

第一次运行可能会提示没有权限,执行chmod -R 777 autoShutdown.sh 来给这个文件设置权限,777就代表给所有用户全部权限,我们这个自己玩的,也可以给755,甚至可以在winscp里面右击autoShutdown.sh选属性,在属性里面勾选权限(和windows差不多的)
有权限后,再次输入./autoShutdown.sh

然后就可以看到result.log里面的内容了,全部是ping通了的(这里间隔只有几秒是因为我为了测试吧间隔时间参数(time)设置的5秒)
这个时候,putty命令行是无法输入命令的状态,我们按下ctrl+c中止命令的执行,修改autoShutdown的ip参数为一个不存在的ip地址“192.168.33.2”,然后再次输入./autoShutdown.sh运行

发现全部是失败的,日期后面的1、2、3、4就是失败次数累加,这个次数在成功之后会归0.
这样,脚本应该是没有问题的了,我们在winscp中右击autoShutdown.sh-编辑,把里面的“# shutdown -h now”前面的井号全部去掉,去掉之后:shutdown -h now,保存文件。
然后,再次输入./autoShutdown.sh
等待一会之后就会发现putty上的linux连接已经断开,至此我们的操作就差不多了。
12.最后需要解决的一个问题就是开机启动,我们的目的是要linux开机之后执行一句代码:
如果nas一年都不怎么停电只是为了预防万一,我觉得可以不设置开机启动,每次出现意外关机连进去输入一次上面的命令就好了。
由于linux不同的版本开机启动有一些差异、并且添加开机启动方法也不止一种,这个大家可以去网上搜一下,这句代码尾巴上有一个“ &”,意思就是让这个脚本在后台运行。什么是后台运行?刚才我们输入./autoShutdown.sh之后,就无法输入命令了,要按下ctrl+c才能输入,实际你按下ctrl+c的时候,这个程序就被结束了。后台运行就是让这个程序自动运行,而不需要我们提供一个终端窗口挂着。

加了&执行后会输出一个数字,这个数字就是这个后台进程的进程id,并且执行后就可以输入新的命令,而这个进程则保持后台持续运行。
最最最最重要的提示!最最最最重要的提示!最最最最重要的提示:
这里需要特别提醒的是,我的shell命令在你的系统上不一定能100%直接执行,可能需要调试,linux比较繁琐的就在这里,没调试好之前,建议直接把shutdown -h now那行代码删掉,测试好再加上去。还有没测试好之前千万别加到开机启动,不然,你那电脑可能就开机-关机-开机-关机-开机-关机。。。。。
好了,整体流程就是这样的,由于对linux不说熟悉,这段shell折腾了2天,目前我们还差一个来电之后自动通知nas开机的功能,实现思路嘛,我打算在路由器上运行shell,开机就给nas发送wol包网络唤醒,linux发送wol包还是很方便的,ether-wake -b mac地址。
最后,多谢各位耐心看到这里!
三、最后
总结一下我们这个方案的优缺点:
优点:
1.当然是省银子,这才是咱们值友的精神所在
2.节约了一个usb接口(ups如果是usb通信的话,需要占用设备一个usb)
缺点:
1.无法通电自动开机,如果要实现这个功能,还需要在路由器上去写一个开机后wol唤醒nas的shell
2.对动手能力有一定的要求
3.我这命令有个小坑,一旦运行起来之后就不会去检查switch文件的内容了,现在的命令逻辑必须要重启或者手动结束这个进程
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝0

帖子2

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时访问好4K

400-123-45678

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:广东省/深圳市
电邮:admin@hao4k.cn
电话:13800138000

Powered by Hao4K X3.3© 2016-2020 Hao4K影音|小黑屋|最新帖|网站地图