找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
广告投放联系QQ68610888广告投放联系QQ68610888
广告投放联系QQ68610888广告投放联系QQ68610888
查看: 1143|回复: 2

利用openwrt路由器进行自动更新GitHub hosts计划任务

[复制链接]
发表于 2025-11-14 16:07 | 显示全部楼层 |阅读模式
本帖最后由 lff520520 于 2025-11-14 16:12 编辑

看到论坛https://www.right.com.cn/FORUM/f ... 4760&highlight=host,这个是利用插件,GitHub里开源给kwrt用的

我下载插件安装在qwrt上不适用,但感觉这个思路不错,所以借鉴下

然后询问豆包老师,测试并正常使用了计划任务完成了每6小时自动更新hosts

1、准备工作:安装必要工具(qwrt本身已安装)
通过 SSH 连接路由器(如用 Xshell、Putty,地址通常为 192.168.1.1,用户名 root,输入路由器密码登录),执行以下命令安装 wget(用于下载远程 hosts):
  1. opkg update && opkg install wget
复制代码
2、创建自动更新脚本(带日志功能,QWRT 兼容)
直接创建并写入优化版脚本,避免手动编辑出错:
  1. # 新建并编辑脚本文件
  2. vi /usr/bin/update_hosts.sh
复制代码
i 进入编辑模式,粘贴以下完整脚本内容(无需修改,直接复制):
  1. #!/bin/sh

  2. # 核心配置(无需修改)
  3. REMOTE_URL="https://github-hosts.tinsfox.com/hosts"
  4. TEMP_FILE="/tmp/remote_hosts.tmp"
  5. LOCAL_HOSTS="/etc/hosts"
  6. LOG_FILE="/var/log/hosts_update.log"

  7. # 日志函数:同时输出到终端和日志文件(带时间戳)
  8. log() {
  9.     local msg="$1"
  10.     local timestamp="[$(date '+%Y-%m-%d %H:%M:%S')]"
  11.     echo "$timestamp $msg"
  12.     echo "$timestamp $msg" >> "$LOG_FILE"
  13. }

  14. # 开始执行:记录日志
  15. log "=== 开始执行 hosts 自动更新 ==="

  16. # 1. 下载远程 hosts(跳过证书验证,兼容部分路由器)
  17. log "正在下载远程 hosts:$REMOTE_URL"
  18. wget -q -T 10 -t 2 --no-check-certificate -O "$TEMP_FILE" "$REMOTE_URL"

  19. # 检查下载结果
  20. if [ ! -s "$TEMP_FILE" ]; then
  21.     log "错误:远程 hosts 下载失败(文件不存在或为空),跳过本次更新"
  22.     rm -f "$TEMP_FILE"
  23.     log "=== 更新执行结束(失败)==="
  24.     echo "" >> "$LOG_FILE"
  25.     exit 1
  26. fi
  27. log "远程 hosts 下载成功"

  28. # 2. 合并 + 去重(过滤注释和空行)
  29. log "正在合并本地与远程 hosts(去重处理)"
  30. {
  31.     cat "$LOCAL_HOSTS"
  32.     cat "$TEMP_FILE" | grep -vE '^#|^$'
  33. } | sort -u > "$LOCAL_HOSTS.tmp"

  34. # 检查合并结果
  35. if [ ! -s "$LOCAL_HOSTS.tmp" ]; then
  36.     log "错误:hosts 合并失败,保留原文件"
  37.     rm -f "$LOCAL_HOSTS.tmp" "$TEMP_FILE"
  38.     log "=== 更新执行结束(失败)==="
  39.     echo "" >> "$LOG_FILE"
  40.     exit 1
  41. fi

  42. # 3. 替换原 hosts 文件
  43. mv "$LOCAL_HOSTS.tmp" "$LOCAL_HOSTS"
  44. log "hosts 合并更新成功"

  45. # 4. 重启 dnsmasq 生效(QWRT/OpenWRT 通用命令)
  46. log "正在重启 dnsmasq 服务,应用新配置"
  47. /etc/init.d/dnsmasq restart

  48. # 检查重启结果
  49. if [ $? -eq 0 ]; then
  50.     log "dnsmasq 重启成功"
  51. else
  52.     log "警告:dnsmasq 重启失败,请手动检查服务状态"
  53. fi

  54. # 5. 清理临时文件
  55. rm -f "$TEMP_FILE"
  56. log "临时文件清理完成"

  57. # 执行结束
  58. log "=== 更新执行结束(成功)==="
  59. echo "" >> "$LOG_FILE"
  60. exit 0
复制代码
粘贴完成后,按 ESC 键,输入 :wq 保存并退出。
3、设置脚本可执行权限
执行以下命令赋予脚本运行权限:
  1. chmod +x /usr/bin/update_hosts.sh
复制代码
4. 手动测试脚本(验证是否正常运行)
运行脚本,查看执行结果:
  1. /usr/bin/update_hosts.sh
复制代码
若输出类似以下日志,说明脚本运行成功:
  1. [2025-11-14 15:51:19] === 开始执行 hosts 自动更新 ===
  2. [2025-11-14 15:51:19] 正在下载远程 hosts:https://github-hosts.tinsfox.com/hosts
  3. [2025-11-14 15:51:20] 远程 hosts 下载成功
  4. [2025-11-14 15:51:20] 正在合并本地与远程 hosts(去重处理)
  5. [2025-11-14 15:51:20] hosts 合并更新成功
  6. [2025-11-14 15:51:20] 正在重启 dnsmasq 服务,应用新配置
  7. [2025-11-14 15:51:20] dnsmasq 重启成功
  8. [2025-11-14 15:51:20] 临时文件清理完成
  9. [2025-11-14 15:51:20] === 更新执行结束(成功)===
复制代码
5. 添加定时任务(每 6 小时自动执行)LuCI 网页界面(推荐,操作简单)
   a、打开浏览器,登录路由器管理界面(地址通常为 [color=var(--color-accent-fg)]http://192.168.1.1);
   b、进入「系统 → 计划任务(Cron)」;
   c、在文本框中添加以下内容(每 6 小时的 0 分执行脚本):
  1. 0 */6 * * * /usr/bin/update_hosts.sh
复制代码
  d、点击「提交」,定时任务生效。


以上已经在我本路由器 太乙路由器 qwrt版本下测试正常

评分

参与人数 1恩山币 +1 收起 理由
fisherpau + 1 你好,久仰卧龙大名,在下凤雏! ...

查看全部评分

只谈技术、莫论政事!(点击见详情) | 互相尊重、友善交流、切勿过度反应、玻璃心。胡乱输入灌水等操作将会被封禁ID。
发表于 2025-11-15 15:10 | 显示全部楼层
支持,以后访问git可以顺畅了
只谈技术、莫论政事!(点击见详情) | 互相尊重、友善交流、切勿过度反应、玻璃心。胡乱输入灌水等操作将会被封禁ID。
回复

使用道具 举报

发表于 2025-11-17 23:21 | 显示全部楼层
这个方法试试看,方便
只谈技术、莫论政事!(点击见详情) | 互相尊重、友善交流、切勿过度反应、玻璃心。胡乱输入灌水等操作将会被封禁ID。
回复

使用道具 举报

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

本版积分规则

关闭

欢迎大家光临恩山无线论坛上一条 /2 下一条

有疑问请添加管理员QQ86788181|手机版|小黑屋|Archiver|恩山无线论坛(常州市恩山计算机开发有限公司版权所有) ( 苏ICP备05084872号 )

GMT+8, 2026-8-23 23:09

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

| 江苏省互联网有害信息举报中心 举报信箱:js12377 | @jischina.com.cn 举报电话:025-88802724 本站不良内容举报信箱:68610888@qq.com 电话:13506125623

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