群晖NAS遇到断电时如何自动关机
- 前置条件
- 实现功能的想法
- 具体实施的步骤
- 开启群晖Linux的SSH登陆
- 安装Putty或是Xshell远程登陆上群晖
- 创建计划任务
前置条件
需要一台UPS(品牌功能不限,只需续航5分钟以上就可以)
实现功能的想法
通过监控网卡的状态来达到目的。 网卡连接的网关并没有UPS保护,因为断电时,网卡会出现离线的状态,当监控到网卡的离线状态时,发出关机命令既可实现安全保护目的。
具体实施的步骤
开启群晖Linux的SSH登陆
登陆群晖管理后台
安装Putty或是Xshell远程登陆上群晖
我这里用的是sa账户登陆的,把脚本文件也放到了sa根目录下。
检测群晖NAS的网卡状态,我的NAS有四个千兆口,查询
root@DataStore:~# ls /sys/class/net/
docker0 docker7cb2ffc dockerf1962b8 dockerf6d9158 eth0 eth1 eth2 eth3 lo sit0
root@DataStore:~#
这里有eth0~eth3四个网卡
查询网卡的状态
root@DataStore:~# cat /sys/class/net/eth0/operstate
down
root@DataStore:~# cat /sys/class/net/eth1/operstate
up
root@DataStore:~#
up在线,down离线,这样就很容易判断了
创建脚本命令:
vim upscheck.sh
1 #!/bin/bash 2 3 #statusFile=~sa/.electricity.status;4 5 # 判断文件是否存在。如果不存在就创建默认文件6 #if [ ! -f "$statusFile" ]; then7 # echo "file is not exists! I will create!";8 # $(echo "off-line" > $statusFile);9 #fi10 11 # 读取上一次检测的结果12 #status=$(cat $statusFile);13 logFile=~sa/poweroff.log;14 15 eth0=$(cat /sys/class/net/eth0/operstate);16 eth1=$(cat /sys/class/net/eth1/operstate);17 eth2=$(cat /sys/class/net/eth2/operstate);18 eth3=$(cat /sys/class/net/eth3/operstate);19 20 # 判断4张网卡是不是都是离线的状态,如果离线了,说明交换机没电了,就要关机了21 if [[ "$eth0" == 'up' || "$eth1" == 'up' || "$eth2" == 'up' || "$eth3" == 'up' ]]; then22 # 网卡有在线,交换机有电,则记录在线状态到文件23 #$(echo "on-line" > $statusFile);24 echo "Power supply is normal, system is normal.";25 else26 #$(echo "off-line" > $statusFile);27 28 # 所有的网卡都离线了,马上关机29 log="Network offline power supply abnormal, system shutdown now!";30 echo "[`date`]$log" >> $logFile;31 $(shutdown -h now);32 fi
创建计划任务