400-915-1135
详细

群晖NAS遇到断电如何自动关机

发表日期:2023-12-31 23:02:15   作者来源:创始人   浏览:0

前置条件

需要一台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:~# 

1

2

3

这里有eth0~eth3四个网卡

查询网卡的状态


root@DataStore:~# cat /sys/class/net/eth0/operstate

down

root@DataStore:~# cat /sys/class/net/eth1/operstate

up

root@DataStore:~# 

1

2

3

4

5

up在线,down离线,这样就很容易判断了

创建脚本命令:


vim upscheck.sh


#!/bin/bash                                                                                                                                 


#statusFile=~sa/.electricity.status;


# 判断文件是否存在。如果不存在就创建默认文件

#if [ ! -f "$statusFile" ]; then

#   echo "file is not exists! I will create!";

#   $(echo "off-line" > $statusFile);

#fi


# 读取上一次检测的结果

#status=$(cat $statusFile);

logFile=~sa/poweroff.log;


eth0=$(cat /sys/class/net/eth0/operstate);

eth1=$(cat /sys/class/net/eth1/operstate);

eth2=$(cat /sys/class/net/eth2/operstate);

eth3=$(cat /sys/class/net/eth3/operstate);


# 判断4张网卡是不是都是离线的状态,如果离线了,说明交换机没电了,就要关机了

if [[ "$eth0" == 'up' || "$eth1" == 'up' || "$eth2" == 'up' || "$eth3" == 'up' ]]; then

# 网卡有在线,交换机有电,则记录在线状态到文件

#$(echo "on-line" > $statusFile);

echo "Power supply is normal, system is normal.";

else

#$(echo "off-line" > $statusFile);


# 所有的网卡都离线了,马上关机

log="Network offline power supply abnormal, system shutdown now!";

echo "[`date`]$log" >> $logFile;

$(shutdown -h now);

fi




本文章多为网络内容整理而来,如有侵犯您的权益,请联系我们免费删除