想到一个办法,随便买一款UPS都可以实现断电自动关机

我也要打十个 2026-08-23 23:16 1

想买个UPS挑了几天发现很多都不兼容NAS断电自动关机


想到一个办法:

停电后路由器也会没网

就是让AI写一个检测连续10分钟无网络的检测脚本,就执行关机命令,然后等到来电再用软路由docker一个可以执行WOL远程开机的功能远程开机


可行靠谱吗?还有没有更好的办法?




让豆包写了下


我将为你编写一套可直接部署、带日志记录、稳定可靠的Linux断网10分钟自动关机脚本,包含脚本文件、开机自启配置、使用说明,适配绝大多数CentOS、Ubuntu、Debian系统。


Linux 断网10分钟自动关机脚本


功能说明


1. 持续检测外网连通性(ping 公共DNS,稳定不失效)

2. 连续断网10分钟(600秒) 自动执行关机

3. 全程记录操作日志,可追溯断网、关机时间

4. 后台常驻运行、支持开机自启、无多余资源占用


一、编写监控脚本


新建脚本文件  /usr/local/network_shutdown.sh


bash


#!/bin/bash


断网超时自动关机脚本 超时时间:10分钟=600秒


配置参数


TIMEOUT_SEC=600 # 断网超时时间

CHECK_INTERVAL=5 # 网络检测间隔(秒)

LOG_FILE="/var/log/network_shutdown.log"

PING_TARGET="223.5.5.5" # 阿里云公共DNS,稳定通用


初始化断网计时


disconnect_time=0


日志写入函数


write_log(){

echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1" >> $LOG_FILE

}


write_log "========== 网络监控服务启动成功 =========="


无限循环监控网络


while true

do

# 测试网络连通性(静默ping,单次快速检测)

ping -c 1 -W 2 $PING_TARGET > /dev/null 2>&1


if [ $? -eq 0 ]; then
# 网络正常,重置计时
if [ $disconnect_time -ne 0 ]; then
write_log "网络已恢复,重置断网计时"
disconnect_time=0
fi
else
# 网络断开,累计计时
disconnect_time=$((disconnect_time + CHECK_INTERVAL))
write_log "网络断开,已持续断网 ${disconnect_time}秒"

# 超时则关机
if [ $disconnect_time -ge $TIMEOUT_SEC ]; then
write_log "断网超时10分钟,系统即将自动关机!!!"
# 执行关机命令
shutdown -h now
exit 0
fi
fi

# 间隔休眠
sleep $CHECK_INTERVAL

done


二、赋予脚本执行权限


bash


chmod +x /usr/local/network_shutdown.sh


三、配置系统开机自启(Systemd 服务,稳定最优)



  1. 创建服务文件


bash


vi /etc/systemd/system/network-shutdown.service



  1. 写入以下内容


ini


[Unit]

Description=Network Disconnect Auto Shutdown Service

After=network-online.target

Wants=network-online.target


[Service]

Type=simple

ExecStart=/bin/bash /usr/local/network_shutdown.sh

Restart=always

RestartSec=10


[Install]

WantedBy=multi-user.target


四、启用并启动服务


bash


重新加载系统服务


systemctl daemon-reload


设置开机自启


systemctl enable network-shutdown


立即启动监控服务


systemctl start network-shutdown


五、常用运维命令


bash


查看服务运行状态


systemctl status network-shutdown


查看监控日志


tail -f /var/log/network_shutdown.log


停止监控服务


systemctl stop network-shutdown


取消开机自启


systemctl disable network-shutdown


六、关键说明


1. 检测原理:每5秒ping一次阿里云DNS,无延迟、无域名解析失败问题,兼容性极强

2. 计时逻辑:必须连续断网10分钟才会关机,中途网络恢复会自动重置计时

3. 权限问题:脚本使用系统root权限运行,关机命令无需额外授权

4. 资源占用:循环休眠检测,CPU、内存占用几乎为0,不影响服务器运行


七、卸载方法(不需要时彻底关闭)


bash


停止并禁用服务


systemctl stop network-shutdown

systemctl disable network-shutdown


删除服务文件


rm -f /etc/systemd/system/network-shutdown.service


删除脚本文件(可选)


rm -f /usr/local/network_shutdown.sh


重载配置


systemctl daemon-reload


脚本全程稳定、低占用,适配所有主流Linux系统

最新回复 (4)
  • Lebron 08-23 23:22
    1

    很多ups都支持自动关机,家用卖的最好的bk650就支持,你搜的什么ups

  • Jager 08-23 23:24
    2

    Bk650+1 配的飞牛

  • 我也要打十个 楼主 08-23 23:27
    3

    @Lebron #1

    我想买个容量足的,30W nAS断电能维持3小时左右的

    比支持nAS关机的便宜60,电池却大了很多

  • oisin 08-23 23:37
    4

    你是什么nas,很多ups通过usb连接到nas,然后断电会通知nas。

* 帖子来源NodeSeek
返回