NAS配合UPS断电关机脚本

NAS配合UPS断电关机脚本

2020-05-12 114 写

通常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/目录,然后在后台—–计划任务—添加开机启动就可以。

NAS配合UPS断电关机脚本 1
NAS配合UPS断电关机脚本 2

最后保存。

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

标签

回复