|
|
一、核心需求
梅林固件路由器,实现:
- 自动从指定网站下载HOSTS文件到/jffs/configs目录,替换原有HOSTS文件,更新完成后执行service restart_dnsmasq命令重启DNS服务;
- 设置每天8点半起,每8小时自动更新一次。

二、核心操作步骤(完整流程)
脚本功能:
下载在线HOSTS文件 → 保存到目标目录 → 替换原有HOSTS → 重启DNS服务,适配梅林固件,无额外依赖。
执行命令创建脚本:
- vi /jffs/scripts/update_hosts.sh
复制代码
按i进入编辑模式,粘贴以下完整脚本(可替换HOSTS下载地址):
- #!/bin/sh
- # 梅林固件 自动下载HOSTS + 合并更新 + 重启DNS
- # 1. 在线HOSTS下载地址(可替换为自己需要的地址)
- HOSTS_URL="https://raw.githubusercontent.com/googlehosts/hosts/master/hosts-files/hosts"
- # 2. 临时下载文件 & 目标存放目录(固定按需求设置)
- TEMP_HOSTS="/jffs/configs/hosts_new"
- FINAL_HOSTS="/jffs/configs/hosts"
- # 3. 开始下载HOSTS文件
- echo "正在下载最新HOSTS文件..."
- wget --no-check-certificate -q -O "$TEMP_HOSTS" "$HOSTS_URL"
- # 4. 检查下载是否成功,成功则替换,失败则保留原有HOSTS
- if [ -f "$TEMP_HOSTS" ] && [ -s "$TEMP_HOSTS" ]; then
- echo "下载成功,开始替换HOSTS..."
- mv -f "$TEMP_HOSTS" "$FINAL_HOSTS"
-
- echo "HOSTS更新完成!"
-
- # 5. 重启dnsmasq服务(梅林固件专用命令)
- echo "重启DNS服务..."
- service restart_dnsmasq
-
- echo "✅ 全部完成!"
- else
- echo "❌ 下载失败,保留原有HOSTS不变"
- rm -f "$TEMP_HOSTS"
- fi
复制代码
按esc,输入qw保存并退出编辑。
2. 给脚本添加执行权限
必须执行此步骤,否则会报“权限不足”或“not found”错误,命令:
- chmod +x /jffs/scripts/update_hosts.sh
复制代码
若仍提示权限不足,补充执行:
- chmod 755 /jffs/scripts/update_hosts.shchmod 755 /jffs/configschmod 755 /jffs/scripts/update_hosts.shchmod 755 /jffs/configs
复制代码
3. 测试脚本是否能正常运行执行以下命令运行脚本,验证功能是否正常:
- ./jffs/scripts/update_hosts.sh
复制代码
正常运行输出(说明成功):
- 正在下载最新HOSTS文件...
- 下载成功,开始替换HOSTS...
- HOSTS更新完成!
- 重启DNS服务...
- ✅ 全部完成!
复制代码
4. 设置定时自动更新(每天8点半起,每8小时一次)
使用梅林固件自带的cru命令添加定时任务,直接复制以下命令执行(无需修改):
- cru a UpdateHosts "30 8,16,0 * * * /jffs/scripts/update_hosts.sh"
复制代码
定时任务说明:
- 30 8,16,0:每天8:30、16:30、0:30各执行一次
- 间隔正好为8小时,从早上8点半开始
- UpdateHosts:定时任务名称(可自定义,后续删除需用到)
5. 定时任务相关辅助命令- 查看定时任务是否添加成功:
- 删除定时任务(如需取消自动更新):
三、常见报错及解决方案
报错1:-sh: ./update_hosts.sh: not found(添加执行权限后仍报错)
核心原因:脚本在Windows编辑器中编辑过,产生Windows换行符(\r),Linux系统无法识别,误以为文件不存在。
解决方案(直接复制命令执行,一键修复):
- # 修复换行符(关键步骤)
- sed -i 's/\r$//' /jffs/scripts/update_hosts.sh
- # 重新运行脚本
- /jffs/scripts/update_hosts.sh
复制代码
若不确定脚本位置,可先进入脚本目录再修复:
- cd /jffs/scripts
- sed -i 's/\r$//' update_hosts.sh
- ./update_hosts.sh
复制代码
报错2:wget: not found原因:部分梅林固件未自带wget命令,需用curl替代。
解决方案:修改脚本中的下载行,将wget命令替换为curl命令:
原下载行(需删除/替换):
- wget --no-check-certificate -q -O "$TEMP_HOSTS" "$HOSTS_URL"
复制代码
替换为:
- curl -L --insecure -o "$TEMP_HOSTS" "$HOSTS_URL"
复制代码
报错3:执行脚本提示“下载失败,保留原有HOSTS不变”
原因:HOSTS_URL地址无效、网络不通,或路由器无法访问该地址(需检查科学上网/网络设置)。
解决方案:替换脚本中的HOSTS_URL为可正常访问的在线HOSTS地址,重新运行脚本即可。
四、补充说明- 脚本路径固定:/jffs/scripts/update_hosts.sh(梅林固件标准脚本目录,避免修改路径,否则需同步修改定时任务命令)。
- HOSTS存放路径:/jffs/configs/hosts(按需求设置,与脚本中FINAL_HOSTS一致)。
- 重启DNS命令:service restart_dnsmasq(梅林固件专用,无需修改)。
- 若需多HOSTS合并、去重,可修改脚本(可提供定制)。
|
|