|
|
本帖最后由 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):
- opkg update && opkg install wget
复制代码 2、创建自动更新脚本(带日志功能,QWRT 兼容)
直接创建并写入优化版脚本,避免手动编辑出错:
- # 新建并编辑脚本文件
- vi /usr/bin/update_hosts.sh
复制代码 按 i 进入编辑模式,粘贴以下完整脚本内容(无需修改,直接复制):
- #!/bin/sh
- # 核心配置(无需修改)
- REMOTE_URL="https://github-hosts.tinsfox.com/hosts"
- TEMP_FILE="/tmp/remote_hosts.tmp"
- LOCAL_HOSTS="/etc/hosts"
- LOG_FILE="/var/log/hosts_update.log"
- # 日志函数:同时输出到终端和日志文件(带时间戳)
- log() {
- local msg="$1"
- local timestamp="[$(date '+%Y-%m-%d %H:%M:%S')]"
- echo "$timestamp $msg"
- echo "$timestamp $msg" >> "$LOG_FILE"
- }
- # 开始执行:记录日志
- log "=== 开始执行 hosts 自动更新 ==="
- # 1. 下载远程 hosts(跳过证书验证,兼容部分路由器)
- log "正在下载远程 hosts:$REMOTE_URL"
- wget -q -T 10 -t 2 --no-check-certificate -O "$TEMP_FILE" "$REMOTE_URL"
- # 检查下载结果
- if [ ! -s "$TEMP_FILE" ]; then
- log "错误:远程 hosts 下载失败(文件不存在或为空),跳过本次更新"
- rm -f "$TEMP_FILE"
- log "=== 更新执行结束(失败)==="
- echo "" >> "$LOG_FILE"
- exit 1
- fi
- log "远程 hosts 下载成功"
- # 2. 合并 + 去重(过滤注释和空行)
- log "正在合并本地与远程 hosts(去重处理)"
- {
- cat "$LOCAL_HOSTS"
- cat "$TEMP_FILE" | grep -vE '^#|^$'
- } | sort -u > "$LOCAL_HOSTS.tmp"
- # 检查合并结果
- if [ ! -s "$LOCAL_HOSTS.tmp" ]; then
- log "错误:hosts 合并失败,保留原文件"
- rm -f "$LOCAL_HOSTS.tmp" "$TEMP_FILE"
- log "=== 更新执行结束(失败)==="
- echo "" >> "$LOG_FILE"
- exit 1
- fi
- # 3. 替换原 hosts 文件
- mv "$LOCAL_HOSTS.tmp" "$LOCAL_HOSTS"
- log "hosts 合并更新成功"
- # 4. 重启 dnsmasq 生效(QWRT/OpenWRT 通用命令)
- log "正在重启 dnsmasq 服务,应用新配置"
- /etc/init.d/dnsmasq restart
- # 检查重启结果
- if [ $? -eq 0 ]; then
- log "dnsmasq 重启成功"
- else
- log "警告:dnsmasq 重启失败,请手动检查服务状态"
- fi
- # 5. 清理临时文件
- rm -f "$TEMP_FILE"
- log "临时文件清理完成"
- # 执行结束
- log "=== 更新执行结束(成功)==="
- echo "" >> "$LOG_FILE"
- exit 0
复制代码 粘贴完成后,按 ESC 键,输入 :wq 保存并退出。
3、设置脚本可执行权限
执行以下命令赋予脚本运行权限:
- chmod +x /usr/bin/update_hosts.sh
复制代码 4. 手动测试脚本(验证是否正常运行)
运行脚本,查看执行结果:
若输出类似以下日志,说明脚本运行成功:
- [2025-11-14 15:51:19] === 开始执行 hosts 自动更新 ===
- [2025-11-14 15:51:19] 正在下载远程 hosts:https://github-hosts.tinsfox.com/hosts
- [2025-11-14 15:51:20] 远程 hosts 下载成功
- [2025-11-14 15:51:20] 正在合并本地与远程 hosts(去重处理)
- [2025-11-14 15:51:20] hosts 合并更新成功
- [2025-11-14 15:51:20] 正在重启 dnsmasq 服务,应用新配置
- [2025-11-14 15:51:20] dnsmasq 重启成功
- [2025-11-14 15:51:20] 临时文件清理完成
- [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 分执行脚本):
- 0 */6 * * * /usr/bin/update_hosts.sh
复制代码 d、点击「提交」,定时任务生效。
以上已经在我本路由器 太乙路由器 qwrt版本下测试正常
|
评分
-
查看全部评分
|