背景

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

脚本思路

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

脚本

  1. #!/bin/bash
  2. # ping的域名
  3. DOMAIN=baidu.com
  4. # 连续计数
  5. NETWORK_CHECK_COUNTER_FILE="/data/shell/log/network_check_counter.log"
  6. # 执行日志
  7. NETWORK_CHECK_LOG_FILE="/data/shell/log/network_check.log"
  8. # 默认计数为0
  9. COUNTER=0
  10. # 连续失败计数大于该数值,则进行 RESTART_INTERVAL 秒等待,再执行重新检测
  11. COUNTER_THRESHOLD=10
  12. # 持续失败,后默认等待时间(秒),然后再重启
  13. RESTART_INTERVAL=600
  14. # 持续失败,判断crontab是否在等待处理
  15. RESTART_NEXTtIME_FILE="/data/shell/log/network_check_sleep.log"
  16. # 检查文件是否存在,如果不存在则创建文件
  17. touch $NETWORK_CHECK_LOG_FILE
  18. if [ ! -e $NETWORK_CHECK_COUNTER_FILE ]; then
  19. touch $NETWORK_CHECK_COUNTER_FILE
  20. echo "0" >$NETWORK_CHECK_COUNTER_FILE
  21. fi
  22. COUNTER=$(cat $NETWORK_CHECK_COUNTER_FILE)
  23. # 检测网络连接函数
  24. function check_network {
  25. # 如果ping 5次至少有2次包未响应,则执行一下代码
  26. if ! ping -c 5 $DOMAIN > /dev/null 2>&1; then
  27. # 如果无法连接网络,则重启网络
  28. echo "$(date '+%Y-%m-%d %H:%M:%S') 网络连接失败"
  29. echo "$(date '+%Y-%m-%d %H:%M:%S') 网络连接失败" >>$NETWORK_CHECK_LOG_FILE
  30. /etc/init.d/network restart
  31. sleep 20
  32. if ! ping -c 5 $DOMAIN > /dev/null 2>&1; then
  33. # 如果仍无法连接网络,则重启OpenWrt服务
  34. echo "$(date '+%Y-%m-%d %H:%M:%S') 网络连接仍然失败,重启OpenWrt服务"
  35. echo "$(date '+%Y-%m-%d %H:%M:%S') 网络连接仍然失败,重启OpenWrt服务" >>$NETWORK_CHECK_LOG_FILE
  36. /etc/init.d/openwrt-service restart
  37. echo "$(date '+%Y-%m-%d %H:%M:%S') OpenWrt服务已重启"
  38. echo "$(date '+%Y-%m-%d %H:%M:%S') OpenWrt服务已重启" >>$NETWORK_CHECK_LOG_FILE
  39. echo $(($(cat $NETWORK_CHECK_COUNTER_FILE) + 1)) >$NETWORK_CHECK_COUNTER_FILE
  40. else
  41. echo "$(date '+%Y-%m-%d %H:%M:%S') 重启网络网络后,连接已恢复"
  42. echo "$(date '+%Y-%m-%d %H:%M:%S') 重启网络网络后,连接已恢复" >>$NETWORK_CHECK_LOG_FILE
  43. echo "0" >$NETWORK_CHECK_COUNTER_FILE
  44. fi
  45. else
  46. echo "$(date '+%Y-%m-%d %H:%M:%S') 网络连接正常"
  47. if [ $(cat $NETWORK_CHECK_COUNTER_FILE) -ge 1 ]; then
  48. # 如果网络畅通且之前有失败计数,则进行POST请求
  49. echo "$(date '+%Y-%m-%d %H:%M:%S') 网络连接已恢复,发送POST请求"
  50. echo "$(date '+%Y-%m-%d %H:%M:%S') 网络连接已恢复,发送POST请求" >>$NETWORK_CHECK_LOG_FILE
  51. # 使用curl发送POST请求到 http://aaa.com
  52. # curl -X POST http://baidu.com
  53. fi
  54. echo "0" >$NETWORK_CHECK_COUNTER_FILE
  55. fi
  56. }
  57. # 计数器检查函数
  58. function check_counter {
  59. COUNTER=$(cat $NETWORK_CHECK_COUNTER_FILE)
  60. if [[ $COUNTER -ge $COUNTER_THRESHOLD ]]; then
  61. echo "$(date '+%Y-%m-%d %H:%M:%S') 计数器值大于等于 $COUNTER_THRESHOLD ,等待 $RESTART_INTERVAL 秒后重新检测网络连接"
  62. echo "$(date '+%Y-%m-%d %H:%M:%S') 计数器值大于等于 $COUNTER_THRESHOLD ,等待 $RESTART_INTERVAL 秒后重新检测网络连接" >>$NETWORK_CHECK_LOG_FILE
  63. sleep $RESTART_INTERVAL # 等待
  64. check_network
  65. else
  66. check_network
  67. fi
  68. }
  69. check_counter
  70. 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后台的计划任务列表里面就可以看到了,也可以直接通过计划任务列表去添加

openwrt 网络检测脚本的更多相关文章

  1. SSRF——weblogic vulhub 漏洞复现及攻击内网redis(一)(附批量检测脚本)

    0X01 概述 SSRF(Server-Side Request Forgery, 服务端请求伪造)利用漏洞可以发起网络请求来攻击内网服务.利用SSRF能实现以下效果:1)        扫描内网(主 ...

  2. Windows操作系统安全加固基线检测脚本

    一.背景信息 在我们的安全运维工作中经常需要进行安全基线配置和检查,所谓的安全基线配置就是系统的最基础的安全配置,安全基线检查涉及操作系统.中间件.数据库.甚至是交换机等网络基础设备的检查,面对如此繁 ...

  3. iOS开发——网络篇——NSURLSession,下载、上传代理方法,利用NSURLSession断点下载,AFN基本使用,网络检测,NSURLConnection补充

    一.NSURLConnection补充 前面提到的NSURLConnection有些知识点需要补充 NSURLConnectionDataDelegate的代理方法有一下几个 - (void)conn ...

  4. Python编写的Linux网络设置脚本,Debian Wheezy上测试通过

    hon编写的Linux网络设置脚本,Debian Wheezy上测试通过       阿里百川梦想创业大赛,500万创投寻找最赞的APP 技术细节参见Linux网络设置高级指南 注意事项参见程序注释 ...

  5. JAVA平台上的网络爬虫脚本语言 CrawlScript

    JAVA平台上的网络爬虫脚本语言 CrawlScript 网络爬虫即自动获取网页信息的一种程序,有很多JAVA.C++的网络爬虫类库,但是在这些类库的基础上开发十分繁琐,需要大量的代码才可以完成一 个 ...

  6. Redis + keepalived 高可用行配置检测脚本

    Redis 在生产配置中:除redis集群.哨兵模式之外:主从模式还是比较普遍的. 配置 redis 多主从:由 keepalived 做 VIP 地址漂移.可以实现redis的高可用性. keepa ...

  7. WinForm多线程实现HTTP网络检测工具

    一.背景描述与课程介绍 明人不说暗话,跟着阿笨一起玩WinForm.本次分享课程属于<C#高级编程实战技能开发宝典课程系列>中的一部分,阿笨后续会计划将实际项目中的一些比较实用的关于C#高 ...

  8. 【javascript】浏览器用户代理检测脚本实现

    以下是完整的用户代理字符串检测脚本,包括检测呈现引擎.平台.Windows操作系统.移动设备和游戏系统. var client = function(){ // 呈现引擎 var engine = { ...

  9. Python写网络后台脚本

    Python写网络后台脚本. 首先安装Python3.6.5,在centos中自带的Python是2.6版本的,现在早就出现了3.6版本了况且2和3 之间的差距还是比较大的,所以我选择更新一下Pyth ...

  10. ios - 高效,准确的网络检测

    //网络检测 // 1.创建网络监听者管理者对象 AFNetworkReachabilityManager *manager = [AFNetworkReachabilityManager share ...

随机推荐

  1. 18V降压3.3V,15V降压3.3V的降压IC和LDO芯片方案

    在 18V 和 15V 输入中,我们需要给其他电源电路提高供电,有的电路的供电电压在 5V,或者是 3.3V 时, 我们就需要使用降压芯片来组建一个降压电路来给后面的的电路,提供稳定的,持续的 3.3 ...

  2. .net6+wpf制作指定局域网ip无法上网的arp欺诈工具

    摘一段来自网上的arp欺诈解释:ARP欺骗(ARP spoofing),又称ARP毒化(ARP poisoning,网络上多译为ARP病毒)或ARP攻击,是针对以太网地址解析协议(ARP)的一种攻击技 ...

  3. Python AI小项目打包通关:Pyinstaller和Wix都用上了

    最近有个Python小项目要打个包,项目结构比较简单 main.py(主文件), 以及model_050.hdf5 (在云端训练好的AI模型) 主函数里引用了一些包,如下 需要解决的问题: 将main ...

  4. 使用Springboot+redis+Vue实现秒杀的一个Demo

    目录 1.Redis简介 2.实现代码 3.启动步骤 4.使用ab进行并发测试 5.线程安全 6.总结 7.参考资料 1.Redis简介 Redis是一个开源的key-value存储系统. Redis ...

  5. kafka详解(01) - 概述

    kafka详解(01) - 概述 定义:Kafka是一个分布式的基于发布/订阅模式的消息队列(Message Queue),主要应用于大数据实时处理领域. 消息队列 MQ传统应用场景之异步处理 使用消 ...

  6. 道长的算法笔记:Trie字典树

    Trie模板 Trie 是一种用于实现字典序快速检索的多叉树结构,Trie 每个节点都有若干的字符指针,若在扫扫描字符串时扫到字符 \(c\),则沿着当前节点 \(c\) 字符指针走向该指针指向的节点 ...

  7. 【Redis 技术探索】「数据迁移实战」手把手教你如何实现在线 + 离线模式进行迁移Redis数据实战指南(离线同步数据)

    离线迁移 与在线迁移相比,离线迁移适宜于源实例与目标实例的网络无法连通的场景,或者源端实例部署在其他云厂商Redis服务中,无法实现在线迁移. 存在的问题 由于生产环境的各种原因,我们需要对现有服务器 ...

  8. python之路36 MySQL查询关键字

    报错及作业讲解 报错 1.粗心大意 单词拼写错误 2.手忙脚乱 不会看报错 思考错误的核心 作业讲解 '''表与表中数据的关系可能会根据业务逻辑的不同 发生改变 不是永远固定的''' 服务器表与应用程 ...

  9. 让 Win8.1 微软拼音新体验模式支持 Metro 应用

    内容回顾: [1]十个步骤找回 Win8 中的微软拼音新体验模式 [2]发布个工具,一键恢复Win8/8.1中的微软拼音长句模式(新体验模式) 在 [1] 中,我们找回了 Win8 里的微软拼音新体验 ...

  10. .NET周报【1月第3期 2023-01-20】

    这应该是2023年农历新年前的最后一篇.NET周报,再次预祝大家新年快乐! 国内文章 看我是如何用C#编写一个小于8KB的贪吃蛇游戏的 https://www.cnblogs.com/InCerry/ ...