首页 > 其他分享 >openwrt 网络检测脚本

openwrt 网络检测脚本

时间:2023-03-01 11:33:51浏览次数:28  
标签:脚本 -% NETWORK 检测 COUNTER echo FILE CHECK openwrt

背景

openwrt 有些固件不太稳定,会时不时的断网,导致家里无法上网,遇到这种情况只能手动重启openwrt设备,该操作不方便,作为一个极客爱好者,那肯定是要实现自动化处理的了,写一个简单的脚本加入到crontab定时任务中,就可完全自动化检测了,解放双手。

脚本思路

1、ping指定域名5次,只要要有2次以上的包响应,才表示网络畅通
2、如果低于2次,则视为网络不通,重启网络,并等待20秒
3、再次检测网络如果还是网络不通的话,则重启openwrt服务
4、当连续失败计数大道10次以上,则重启次数改为10分钟,重复上述步骤,当网络畅通后,计数归零

脚本

#!/bin/bash

# ping的域名
DOMAIN=baidu.com
# 连续计数
NETWORK_CHECK_COUNTER_FILE="/data/shell/log/network_check_counter.log"
# 执行日志
NETWORK_CHECK_LOG_FILE="/data/shell/log/network_check.log"
# 默认计数为0
COUNTER=0

# 连续失败计数大于该数值,则进行 RESTART_INTERVAL 秒等待,再执行重新检测
COUNTER_THRESHOLD=10
# 持续失败,后默认等待时间(秒),然后再重启
RESTART_INTERVAL=600
# 持续失败,判断crontab是否在等待处理
RESTART_NEXTtIME_FILE="/data/shell/log/network_check_sleep.log"

# 检查文件是否存在,如果不存在则创建文件
touch $NETWORK_CHECK_LOG_FILE

if [ ! -e $NETWORK_CHECK_COUNTER_FILE ]; then
    touch $NETWORK_CHECK_COUNTER_FILE
    echo "0" >$NETWORK_CHECK_COUNTER_FILE
fi
COUNTER=$(cat $NETWORK_CHECK_COUNTER_FILE)

# 检测网络连接函数
function check_network {
    # 如果ping 5次至少有2次包未响应,则执行一下代码
    if ! ping -c 5 $DOMAIN > /dev/null 2>&1; then
        # 如果无法连接网络,则重启网络
        echo "$(date '+%Y-%m-%d %H:%M:%S') 网络连接失败"
        echo "$(date '+%Y-%m-%d %H:%M:%S') 网络连接失败" >>$NETWORK_CHECK_LOG_FILE
        /etc/init.d/network restart
        sleep 20
        if ! ping -c 5 $DOMAIN > /dev/null 2>&1; then
            # 如果仍无法连接网络,则重启OpenWrt服务
            echo "$(date '+%Y-%m-%d %H:%M:%S') 网络连接仍然失败,重启OpenWrt服务"
            echo "$(date '+%Y-%m-%d %H:%M:%S') 网络连接仍然失败,重启OpenWrt服务" >>$NETWORK_CHECK_LOG_FILE
            /etc/init.d/openwrt-service restart
            echo "$(date '+%Y-%m-%d %H:%M:%S') OpenWrt服务已重启"
            echo "$(date '+%Y-%m-%d %H:%M:%S') OpenWrt服务已重启" >>$NETWORK_CHECK_LOG_FILE
            echo $(($(cat $NETWORK_CHECK_COUNTER_FILE) + 1)) >$NETWORK_CHECK_COUNTER_FILE
        else
            echo "$(date '+%Y-%m-%d %H:%M:%S') 重启网络网络后,连接已恢复"
            echo "$(date '+%Y-%m-%d %H:%M:%S') 重启网络网络后,连接已恢复" >>$NETWORK_CHECK_LOG_FILE
            echo "0" >$NETWORK_CHECK_COUNTER_FILE
        fi
    else
        echo "$(date '+%Y-%m-%d %H:%M:%S') 网络连接正常"
        if [ $(cat $NETWORK_CHECK_COUNTER_FILE) -ge 1 ]; then
            # 如果网络畅通且之前有失败计数,则进行POST请求
            echo "$(date '+%Y-%m-%d %H:%M:%S') 网络连接已恢复,发送POST请求"
            echo "$(date '+%Y-%m-%d %H:%M:%S') 网络连接已恢复,发送POST请求" >>$NETWORK_CHECK_LOG_FILE
            # 使用curl发送POST请求到 http://aaa.com
            # curl -X POST http://baidu.com
        fi
        echo "0" >$NETWORK_CHECK_COUNTER_FILE
    fi
}

# 计数器检查函数
function check_counter {
    COUNTER=$(cat $NETWORK_CHECK_COUNTER_FILE)
    if [[ $COUNTER -ge $COUNTER_THRESHOLD ]]; then
        echo "$(date '+%Y-%m-%d %H:%M:%S') 计数器值大于等于 $COUNTER_THRESHOLD ,等待 $RESTART_INTERVAL 秒后重新检测网络连接"
        echo "$(date '+%Y-%m-%d %H:%M:%S') 计数器值大于等于 $COUNTER_THRESHOLD ,等待 $RESTART_INTERVAL 秒后重新检测网络连接" >>$NETWORK_CHECK_LOG_FILE
        sleep $RESTART_INTERVAL # 等待
        check_network
    else
        check_network
    fi
}

check_counter

echo "$(date '+%Y-%m-%d %H:%M:%S') network 检查完毕"

部署

1、将该脚本放在openwrt任意一个目录,我这里是放在 /data/shell/目录下
2、添加执行权限 chomd +x ./network-check.sh
3、执行crontab -ecrontab 中追加一行 */2 * * * * /data/shell/network-check.sh 2分钟执行一次检测
4、添加完成后,我们在openwrt后台的计划任务列表里面就可以看到了,也可以直接通过计划任务列表去添加
image.png

标签:脚本,-%,NETWORK,检测,COUNTER,echo,FILE,CHECK,openwrt
From: https://www.cnblogs.com/jesn/p/17167544.html

相关文章

  • CentOS7.6 添加系统自启脚本
    一、编辑脚本1.在自定义的脚本中添加#chkconfig:2352080#chkconfig:23452080 其中2345是默认启动级别,全部0-6共有7个级别。0表示:表示......
  • 给外联样式表和JavaScript脚本增加版本号的方法
    方法和问题方法一:前端使用JQuery的方法增加版本号方法二:前端使用JavaScript来增加版本号方法三:后端代码加载方法一:前端使用JQuery的方法增加版本号先上代码<scri......
  • 工具利用,原创脚本分享
    前言手动信息收集很累也很慢,这时候一个好用的工具能节省不少时间。​​脚本文件与源代码下载在文末​​工具介绍theHarvester是一款通过搜索引擎、PGP服务器以及SHODAN数据......
  • 用snort+barnyard2+base 搭建入侵检测系统IDS
    前言吐槽:最近给老板干活编写攻防教材,恰好我负责校对的这部分出了问题……原本师兄直接拷贝的那篇博客是15年的……环境用的ubuntu12,其中的snort-mysql早被drop掉了,14......
  • JAVA执行bat文件和shell脚本文件
    1。bat文件importjava.io.IOException;importjava.io.InputStream;publicclasscallbat{publicstaticvoidmain(Stringargs[]){callCmd("C:/r......
  • shell-实现一些小功能脚本
    实现免密登录vim./passwdpasswd="xxxxxxxx"#!/bin/bashsource./passwdfunctionsecret_free_login(){ls/root/.ssh/id_rsa.pub&>/dev/null......
  • zabbix钉钉告警js脚本
    varDingding={params:{},proxy:null,setParams:function(params){if(typeofparams!=='object'){return;}D......
  • shell-对于变量的使用的一些脚本实现方式
    for循环简单实现#!/bin/bashcd/root/health-check/>/tmp/bomp-check-result.jsonforiin$(ls./check*.sh)dobash./$idone通过端口判断kubel......
  • linux 环境启动jar服务, 启动脚本详细解释
    掰碎了讲一个jar包启动文件.当前服务目录如下#ls/easy/test/info/->binmytest.jar#ls/easy/test/info/bin/->spring-boot.shspring-boot.sh文件内容如......
  • 同步脚本
    #!/bin/bash#1.判断参数个数if[$#-lt1]thenechoNotEnoughArguement!exit;fi#2.遍历集群所有机器rpm-qrsync&>/dev/null||yuminstall-y......