找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
听天命
查看: 2|回复: 0

梅林固件HOSTS自动更新完整操作文档(含报错解决)

[复制链接]

56

主题

6

回帖

40万

积分

管理员

积分
400140

最佳新人活跃会员热心会员推广达人宣传达人灌水之王突出贡献优秀版主荣誉管理论坛元老

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




二、核心操作步骤(完整流程)
  • 编写自动更新脚本
脚本功能:
下载在线HOSTS文件 → 保存到目标目录 → 替换原有HOSTS → 重启DNS服务,适配梅林固件,无额外依赖。
执行命令创建脚本:
  1. vi /jffs/scripts/update_hosts.sh
复制代码

按i进入编辑模式,粘贴以下完整脚本(可替换HOSTS下载地址):
  1. #!/bin/sh

  2. # 梅林固件 自动下载HOSTS + 合并更新 + 重启DNS
  3. # 1. 在线HOSTS下载地址(可替换为自己需要的地址)
  4. HOSTS_URL="https://raw.githubusercontent.com/googlehosts/hosts/master/hosts-files/hosts"

  5. # 2. 临时下载文件 & 目标存放目录(固定按需求设置)
  6. TEMP_HOSTS="/jffs/configs/hosts_new"
  7. FINAL_HOSTS="/jffs/configs/hosts"

  8. # 3. 开始下载HOSTS文件
  9. echo "正在下载最新HOSTS文件..."
  10. wget --no-check-certificate -q -O "$TEMP_HOSTS" "$HOSTS_URL"

  11. # 4. 检查下载是否成功,成功则替换,失败则保留原有HOSTS
  12. if [ -f "$TEMP_HOSTS" ] && [ -s "$TEMP_HOSTS" ]; then
  13.     echo "下载成功,开始替换HOSTS..."
  14.     mv -f "$TEMP_HOSTS" "$FINAL_HOSTS"
  15.    
  16.     echo "HOSTS更新完成!"
  17.    
  18.     # 5. 重启dnsmasq服务(梅林固件专用命令)
  19.     echo "重启DNS服务..."
  20.     service restart_dnsmasq
  21.    
  22.     echo "✅ 全部完成!"
  23. else
  24.     echo "❌ 下载失败,保留原有HOSTS不变"
  25.     rm -f "$TEMP_HOSTS"
  26. fi
复制代码

按esc,输入qw保存并退出编辑。
2. 给脚本添加执行权限
必须执行此步骤,否则会报“权限不足”或“not found”错误,命令:
  1. chmod +x /jffs/scripts/update_hosts.sh
复制代码

若仍提示权限不足,补充执行:
  1. chmod 755 /jffs/scripts/update_hosts.shchmod 755 /jffs/configschmod 755 /jffs/scripts/update_hosts.shchmod 755 /jffs/configs
复制代码

3. 测试脚本是否能正常运行执行以下命令运行脚本,验证功能是否正常:
  1. ./jffs/scripts/update_hosts.sh
复制代码

正常运行输出(说明成功):
  1. 正在下载最新HOSTS文件...
  2. 下载成功,开始替换HOSTS...
  3. HOSTS更新完成!
  4. 重启DNS服务...
  5. ✅ 全部完成!
复制代码

4. 设置定时自动更新(每天8点半起,每8小时一次)
使用梅林固件自带的cru命令添加定时任务,直接复制以下命令执行(无需修改):
  1. 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. cru l
    复制代码
  • 删除定时任务(如需取消自动更新):
    1. cru d UpdateHosts
    复制代码

三、常见报错及解决方案
报错1:-sh: ./update_hosts.sh: not found(添加执行权限后仍报错)
核心原因:脚本在Windows编辑器中编辑过,产生Windows换行符(\r),Linux系统无法识别,误以为文件不存在。
解决方案(直接复制命令执行,一键修复):
  1. # 修复换行符(关键步骤)
  2. sed -i 's/\r$//' /jffs/scripts/update_hosts.sh

  3. # 重新运行脚本
  4. /jffs/scripts/update_hosts.sh
复制代码

若不确定脚本位置,可先进入脚本目录再修复:
  1. cd /jffs/scripts
  2. sed -i 's/\r$//' update_hosts.sh
  3. ./update_hosts.sh
复制代码

报错2:wget: not found原因:部分梅林固件未自带wget命令,需用curl替代。
解决方案:修改脚本中的下载行,将wget命令替换为curl命令:
原下载行(需删除/替换):
  1. wget --no-check-certificate -q -O "$TEMP_HOSTS" "$HOSTS_URL"
复制代码

替换为:
  1. 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合并、去重,可修改脚本(可提供定制)。




回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

精简版|手机版|嗐!无思百忧,祇自重兮 ( 京ICP备18055970号|京ICP备18055970号 )晋公网安备 14010902001813号 劰载中... 本站总访问量次. 您是第个小伙伴

GMT+8, 2026-3-26 18:37 , Processed in 0.135285 second(s), 25 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表