OpenWrt 脚本编写及常见维护脚本(九)

定时执行任务

package/files/etc/crontabs/root文件(如果没有root,touch root)

# 每分钟检查4G模组配置自动联网模式
*/1 * * * * /home/read_ec20x_config.sh
# 每分钟检测WiFi是否开启成功
*/1 * * * * /home/wifi_check.sh
# 每天凌晨3点55分重启设备
55 3 * * * sync && sleep 120 && /home/reboot.sh

重启脚本

该脚本对重启WiFi模块的添加自定义重启4G模组的脚本

#!/bin/sh
#########################################
# File Name: reboot.sh
# Version: v1.0
# Author:kinder
#########################################

# 调整输出串口终端字体的颜色 echo -e xxxx > /dev/console
GREED_WORK='\e[1;32m'
RED_WORK='\e[1;31m'
DEF_WORK='\e[0m'
DATE_TIME=`date +"%Y-%m-%d %H:%M:%S"`
SONSOLE=/dev/console

EC20X_DEVICE=/dev/ttyUSB1
TIMEOUT=300

# 打印重启提示
echo -e $RED_WORK"\n$DATE_TIME Reboot Device ..."$DEF_WORK > $SONSOLE

# 使用 touch 写文件,因为路由器如果没有及时联网从NTP服务器上获取到时间,那么路由器的系统时间和重启的系统时间便一样,如果修改过文件,Openwrt 开机后会把最后修改或者访问的文件时间作为默认系统时间。因此延迟1min重启,可以避免这个问题
touch /etc/banner 
# 重启前系统文件同步
sync
# 判断是否有4G模组,如果有则重启4G模组
if [ -c $EC20X_DEVICE ]
then
    echo -e "AT+QPOWD=1\r\n"| microcom -t $TIMEOUT $EC20X_DEVICE
else
    echo -e $RED_WORK"Not Find Ec20x Device:"$EC20X_DEVICE$DEF_WORK > $SONSOLE
fi
reboot -f

检测WIFI是否开启成功

该脚本只适合单WiFi检测,检测设备WiFi开启失败进行重新开启WiFi,并且连续多次开启WiFi失败后重启设备。

#!/bin/sh
#########################################
# File Name: wifi_check.sh
# Version: v1.0
# Author:kinder
#########################################

# 调整输出串口终端字体的颜色 echo -e xxxx > /dev/console
GREED_WORK='\e[1;32m'
RED_WORK='\e[1;31m'
DEF_WORK='\e[0m'
DATE_TIME=`date +"%Y-%m-%d %H:%M:%S"`
SONSOLE=/dev/console

# WiFi开启检测的标志的临时文件初始化(打开失败,会向文件中数值+1)
WIFI_STATUS=/tmp/wifi_status
if [ -f $WIFI_STATUS ]
then
    num=`cat $WIFI_STATUS | grep "[0-9]" | tr -d '\r' | tr -d '\n'`
    if expr $num + 1 &>/dev/null
    then
        echo -e "\nopen wifi error time:"$num
    else
        echo 0 > $WIFI_STATUS
        num=0
    fi
else
    echo 0 > $WIFI_STATUS
    num=0
fi

# 检测WiFi配置是否禁用,用户禁用则跳过检测
disabled=`cat /etc/config/wireless  | grep "disabled '1'" | wc -l`
if [ $disabled != 1 ]
then
    state=`iwinfo | grep "SSID" | wc -l`
    # 只适合单WIFI,因为这个判断局限性(可以修改成检测WIFI名称-前提WIFI有一套固定生成规则)
    if [ $state -gt 0 ]
    then
        echo "wifi ssid is open"
        # 重置WiFi开启标志
        echo 0 > $WIFI_STATUS
    else
        echo -e $RED_WORK"\n $DATE_TIME wifi open error"$DEF_WORK > $SONSOLE
        # 开启WIFI
        wifi up
        # 将失败次数累加,连续失败后会重启设备
        temp=`expr $num + 1`
        if [ $temp -gt 2 ]
        then
            echo -e $RED_WORK"\n$DATE_TIME wifi open error . will reboot system"$DEF_WORK > $SONSOLE
            # 做重启指令,由于附带4G模块。如果只重启WiFi模块,不重启4G模块会导致4G速率没有正常上电的快。故重写reboot.sh
            /home/reboot.sh
        fi
        # 写入文件
        echo $temp > $WIFI_STATUS
    fi
else
    echo 0 > $WIFI_STATUS
    echo "wifi disabled"
fi

4G模组常规配置的检查及配置

注意:脚本需要busybox ->microcom 工具
该脚本检测是否自动联网,如果不是则通过命令修改模组配置并且重启设备。另外还查询4G模组信息,联网信息。不对插卡以及注网结果进行实际性处理,只做提示与记录。

#!/bin/sh
#########################################
# File Name: read_ec20x_config.sh
# Version: v1.0
# Author:kinder
#########################################
echo "Read EC20X Config ..."

GREED_WORK='\e[1;32m'
RED_WORK='\e[1;31m'
DEF_WORK='\e[0m'
DATE_TIME=`date +"%Y-%m-%d %H:%M:%S"`
SONSOLE=/dev/console

# 缓存EC200 模组信息
EC20X_CONFIG=/tmp/ec20x_config
# EC200 设备号
EC20X_DEVICE=/dev/ttyUSB1
# EC200 访问超时时间 单位ms
TIMEOUT=300

# 设备是否存在 ,如果不存在设备,则跳出检测
if [ -c $EC20X_DEVICE ]
then
	# 判断 EC200信息 是否存在 如果第一次读取到模组信息后续,不再检测(1. 减少频繁访问,因为采用时间计划方式,2.通过ping方式协助管理4g模组)
	if [ -s $EC20X_CONFIG ]
	then
		echo "exit"
	else
		# 确认设备是否自动联网
		CQNETDEVCTL=`echo -e "AT+QNETDEVCTL?\r\n"| microcom -t $TIMEOUT $EC20X_DEVICE | grep -i "+QNETDEVCTL: 3,1" | wc -l`
		if [ $CQNETDEVCTL != 1 ]
		then
			# 模组自动联网配置
			QNETDEVCTL=`echo -e "AT+QNETDEVCTL=3,1\r\n"| microcom -t $TIMEOUT $EC20X_DEVICE | grep -i "AT+QNETDEVCTL" | cut -f 2 -s -d "="`
			echo -e "QNETDEVCTL:"$QNETDEVCTL  >> $EC20X_CONFIG
			
			echo -e $RED_WORK"\n$DATE_TIME set ec20x module auto connect network. will reboot..."$DEF_WORK > $SONSOLE
			sync
			sleep 3
			echo -e "AT+QPOWD=1\r\n" | microcom -t $TIMEOUT $EC20X_DEVICE
			reboot -f
		fi
	   
		# 模组版本号
		GMR=`echo -e "AT+GMR\r\n" | microcom -t $TIMEOUT $EC20X_DEVICE | grep -i "EC"`
		echo -e "GMR:"$GMR >> $EC20X_CONFIG

		# 模组IMEI
		IMEI=`echo -e "AT+GSN\r\n" | microcom -t $TIMEOUT $EC20X_DEVICE | grep "[0-9]"`
		echo -e "IMEI:"$IMEI >> $EC20X_CONFIG

		# 模组网卡选择
		USBNET=`echo -e "AT+QCFG="usbnet"\r\n"| microcom -t $TIMEOUT $EC20X_DEVICE | grep -i "+QCFG:" | cut -f 2 -s -d "," | tr -d '\r' | tr -d '\n'`
		case $USBNET in
		1)
			echo "USBNET:ECM"  >> $EC20X_CONFIG
			break
			;;
		3)
			echo "USBNET:RNIDS"  >> $EC20X_CONFIG
			break
			;;
		esac
		
		# 查询 SIM卡 是否插入
		CPIN=`echo -e "AT+CPIN?\r\n"| microcom -t $TIMEOUT $EC20X_DEVICE | grep -i "+CPIN:" | cut -f 2 -s -d " "`
		echo -e "CPIN:"$CPIN    >> $EC20X_CONFIG

		# 判断 SIM卡 是否插入
		CCPIN=`echo -e "AT+CPIN?\r\n"| microcom -t $TIMEOUT $EC20X_DEVICE | grep -i "+CPIN:" | wc -l`
		if [ $CCPIN == 1 ]
		then
			# 查询 是否 注册 网络
			temp=`echo -e "AT+CREG?\r\n"| microcom -t $TIMEOUT $EC20X_DEVICE | grep -i "+CREG:" | cut -f 2 -d " "`
			echo -e "CREG:"$temp >> $EC20X_CONFIG
			
			# 判断 模组是否注网成功
			CCREG=`echo -e "AT+CREG?\r\n"| microcom -t $TIMEOUT $EC20X_DEVICE | grep -i "+CREG: 0,1\|+CREG: 0,5" | wc -l`
			if [ $CCREG == 1 ]
			then
				# 查询信号质量
				CSQ=`echo -e "AT+CSQ\r\n"| microcom -t $TIMEOUT $EC20X_DEVICE | grep -i "+CSQ:" | cut -f 2 -s -d " "`
				echo "CSQ:"$CSQ >> $EC20X_CONFIG
				# 查询SIM卡的IMSI
				IMSI=`echo -e "AT+CIMI\r\n"| microcom -t $TIMEOUT $EC20X_DEVICE | grep "[0-9]"`
				echo "IMSI:"$IMSI >> $EC20X_CONFIG
				# 查询SIM卡的ICCID
				ICCID=`echo -e "AT+QCCID\r\n"| microcom -t $TIMEOUT $EC20X_DEVICE | grep -i "+QCCID:" | cut -f 2 -s -d " "`
				echo "ICCID:"$ICCID >> $EC20X_CONFIG
				# 查询运营商
				COPS=`echo -e "AT+COPS?\r\n"| microcom -t $TIMEOUT $EC20X_DEVICE | grep -i "+COPS:" | cut -f 2 -s -d "\""`
				echo "COPS:"$COPS >> $EC20X_CONFIG
				# 查询信道
				QNWINFO=`echo -e "AT+QNWINFO\r\n"| microcom -t $TIMEOUT $EC20X_DEVICE | grep -i "+QNWINFO:" | cut -f 2 -s -d ":"`
				echo "QNWINFO:"$QNWINFO >> $EC20X_CONFIG
			else
				echo -e $RED_WORK"\n$DATE_TIME ec20x connect fail. CREG:"$temp$DEF_WORK > $SONSOLE
				rm -f $EC20X_CONFIG
			fi
		else
			echo -e $RED_WORK"\n$DATE_TIME SIM Card fail\n"$DEF_WORK > $SONSOLE
			rm -f $EC20X_CONFIG
		fi
	fi
else
    echo -e $RED_WORK"\n$DATE_TIME Not Find Ec20x Device:"$EC20X_DEVICE$DEF_WORK > $SONSOLE
	rm -f $EC20X_CONFIG
fi


检测网络

#!/bin/sh
#########################################
# File Name: detection_network.sh
# Version: v1.0
# Author:kinder
#########################################
GREED_WORK='\e[1;32m'
RED_WORK='\e[1;31m'
DEF_WORK='\e[0m'
DATE_TIME=`date +"%Y-%m-%d %H:%M:%S"`
SONSOLE=/dev/console

EC20X_CONFIG=/tmp/ec20x_config
NETWORK_STATUS=/tmp/network_status
# 带域名方式,通用性较好  ping的地址自己根据自己需要修改
IP1=wwww.baidu.com
# 百度公共IP,可能一些设备dns不了域名,
IP2=180.76.76.76
# 谷歌IP 114有时候ping 不通
IP3=8.8.8.8

# 记录网络状态标志的文件
if [ -f $NETWORK_STATUS ]
then
    num=`cat $NETWORK_STATUS | grep "[0-9]" | tr -d '\r' | tr -d '\n'`
    if expr $num + 1 &>/dev/null
    then
        echo -e "\nping error time:"$num
    else
        echo 0 > $NETWORK_STATUS
        num=0
    fi
else
    echo 0 > $NETWORK_STATUS
    num=0
fi

# 尝试 第一次 ping
state=`ping -w 3 -c 1 $IP1 | grep -i "time=" | wc -l`
if [ $state != 1 ]
then
    echo -e $RED_WORK"\n$DATE_TIME ping:"$IP1" fail"$DEF_WORK > $SONSOLE
	# 尝试 第二次 ping
    state=`ping -w 3 -c 1 $IP2 | grep -i "time=" | wc -l`
    if [ $state != 1 ]
    then
        echo -e $RED_WORK"$DATE_TIME ping:"$IP2" fail"$DEF_WORK > $SONSOLE
		# 尝试 第三次 ping
        state=`ping -w 3 -c 1 $IP3 | grep -i "time=" | wc -l`
        if [ $state != 1 ]
        then
            rm -f $EC20X_CONFIG
            echo -e $RED_WORK"$DATE_TIME ping:"$IP3" fail"$DEF_WORK > $SONSOLE
            temp=`expr $num + 1`
            if [ $temp -gt 2 ]
            then
                echo -e $RED_WORK"\n$DATE_TIME ping error . will reboot system"$DEF_WORK > $SONSOLE
                /home/reboot.sh
            fi
            echo $temp > $NETWORK_STATUS
        else
            echo 0 > $NETWORK_STATUS
        fi
    else
        echo 0 > $NETWORK_STATUS
    fi
else
    echo 0 > $NETWORK_STATUS
fi

进阶篇:OpenWrt网络优化,提升网络稳定性

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
OpenWrt 是一个基于 Linux 的嵌入式操作系统,它提供了一个灵活的平台,可以在各种路由器和嵌入式设备上运行。您可以使用启动脚本来配置和定制 OpenWrt 的启动过程。 OpenWrt 使用的启动脚本是 `/etc/init.d` 目录下的脚本文件。这些脚本文件使用了类似于传统的 SysVinit 启动脚本的语法。 要创建一个启动脚本,请按照以下步骤操作: 1. 在 `/etc/init.d` 目录下创建一个新的脚本文件,例如 `myscript`。 ``` root@OpenWrt:~# cd /etc/init.d root@OpenWrt:/etc/init.d# touch myscript ``` 2. 编辑这个脚本文件并添加所需的配置和命令。您可以使用任何文本编辑器来编辑脚本文件。 ``` root@OpenWrt:/etc/init.d# vi myscript ``` 在脚本文件中,您可以编写启动、停止和重启服务、加载模块、设置环境变量等操作。 3. 添加可执行权限到脚本文件。 ``` root@OpenWrt:/etc/init.d# chmod +x myscript ``` 4. 在 `/etc/rc.d` 目录下创建一个符号链接,将脚本文件链接到适当的运行级别。 ``` root@OpenWrt:/etc/init.d# cd /etc/rc.d root@OpenWrt:/etc/rc.d# ln -s ../init.d/myscript S99myscript ``` 这将在启动时执行脚本文件。 5. 最后,您可以使用以下命令来启动、停止或重启脚本。 ``` root@OpenWrt:~# /etc/init.d/myscript start root@OpenWrt:~# /etc/init.d/myscript stop root@OpenWrt:~# /etc/init.d/myscript restart ``` 请注意,这只是一个简单的示例,您可以根据自己的需求编写更复杂的启动脚本。另外,建议您在编辑和测试脚本之前先备份相关文件,以免出现意外情况。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

凡諦

你的鼓励是我最大创作动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值