通常ups带有USB或者232接口来和nas通信, 假如我的UPS不带这些通信接口又该如何起到保护NAS主机呢。
首先我们要清楚UPS 就是个备用电源,无论和NAS主机如何通信,其目的都是告诉NAS 主机外部电源短了我切换为备用电源,备用电源要挂之前通知NAS 关机。
知道了上面的原理就好办了。反过来处理上面的问题。在NAS上运行脚本,定时去访问本地网络中的一个设备,这个设备直接用的市电,断电后接在UPS后面NAS就无法通过网络访问市电下的设备,就执行关机。
开始实施,每个家里有nas的都有路由器,我们让路由器直接接到市电下,nas 接到UPS下,在NAS上部署定时脚本,每过一段时间就去ping 路由器的地址,当断电后路由器就会ping 失败,连线多次后还是无法ping 通,NAS上的脚本执行关机。我们以pve系统为例,将脚本命名为ups-safe-shutdown.sh保存到/usr/local/bin目录下,并给777权限:
#!/bin/bash
target_ip=192.168.2.1
failure_count=0
shutdown_failure_count_threshold=15
while :
do
ping -c 1 $target_ip &> /dev/null
if [ $? -eq 0 ]; then
((failure_count=0))
else
((failure_count++))
fi
sleep 10s
if [ $failure_count -eq $shutdown_failure_count_threshold ]; then
/sbin/shutdown -hP now
break
fi
done
exit 0
说明:
target_ip:是我要ping的路由IP
shutdown命令这里使用了绝对路径
设置开机启动
脚本编写完成后,我们需要在开机的时候自动运行它。首先使用crontab -e
(非root下要使用sudo crontab -e
),在其中写入
@reboot /usr/local/bin/ups-safe-shutdown.sh &
这样每次开机时就会启动这个脚本了。但随之而来有一个问题,由于crontab
的一些限制(或者说特性),直接在脚本中执行shutdown
是不会关机的,所以关机命令要使用绝对路径。至此,PVE主机就可以在停电的时候安全地自动关机了。
如果你用的是openmediavault 系统,将上面的代码保存到/usr/local/bin/目录,然后在后台—–计划任务—添加开机启动就可以。


最后保存。
至于来电后的开机,我们可以在主板BIOS里设置,来电自动开机。