想买个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 服务,稳定最优)
- 创建服务文件
bash
vi /etc/systemd/system/network-shutdown.service
- 写入以下内容
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系统