这是一个基于Python的GitHub hosts自动更新服务,能够每小时自动检查GitHub hosts是否发生变化,并及时更新本地hosts文件,解决GitHub访问问题。
- ✅ 自动检测变化:智能比对本地和远程hosts内容,仅在有变化时才更新
- ✅ 定时调度:使用APScheduler每小时自动检查一次
- ✅ 权限管理:自动请求管理员权限,无需手动操作
- ✅ 详细日志:记录每次检查时间、更新状态、错误信息等
- ✅ 安全备份:更新前自动备份原hosts文件
- ✅ 错误恢复:更新失败时自动从备份恢复
- ✅ 后台运行:作为持续服务运行,无需人工干预
fetch_github_hosts_py/
├── main.py # 主程序入口,包含调度器和管理员权限请求
├── hosts_updater.py # Hosts更新核心逻辑
├── config.py # 配置文件(远程URL、hosts路径等)
├── requirements.txt # Python依赖包
├── logs/ # 日志目录(自动创建)
│ └── github_hosts_updater.log # 日志文件
└── README.md # 使用说明文档
- Python 3.7 或更高版本
- Windows 操作系统
- 管理员权限(程序会自动请求)
# 进入项目目录
cd fetch_github_hosts_py
# 安装依赖包
pip install -r requirements.txt# 直接运行(程序会自动请求管理员权限)
python main.py或者:
# 以管理员身份运行
# 右键点击命令提示符 -> 以管理员身份运行
python main.py- 打开命令提示符或PowerShell
- 进入项目目录:
cd fetch_github_hosts_py - 运行程序:
python main.py - 程序会自动请求管理员权限(如需要)
- 服务启动后会立即执行一次检查
- 之后每小时自动检查一次
按 Ctrl+C 停止服务
日志文件位置:logs/github_hosts_updater.log
日志内容包括:
- 每次检查的时间戳
- 是否检测到hosts变化
- 更新成功/失败状态
- 详细的错误信息
可以通过修改 config.py 文件来调整配置:
# 检查间隔(小时)
CHECK_INTERVAL_HOURS = 1
# 远程hosts URL
REMOTE_HOSTS_URL = "https://raw.hellogithub.com/hosts"
# hosts文件路径
HOSTS_FILE_PATH = r"C:\Windows\System32\drivers\etc\hosts"
# 日志配置
LOG_MAX_BYTES = 10 * 1024 * 1024 # 10MB
LOG_BACKUP_COUNT = 5 # 保留5个备份文件- 获取远程内容:从
https://raw.hellogithub.com/hosts获取最新的hosts配置 - 读取本地文件:读取本地hosts文件,提取GitHub520部分
- 内容比对:标准化处理后比对本地和远程内容
- 智能更新:仅在检测到变化时才更新hosts文件
- 安全备份:更新前自动备份,失败时自动恢复
- 需要能够访问
https://raw.hellogithub.com/hosts - 如果网络不稳定,程序会自动重试3次
- 需要管理员权限来修改hosts文件
- 程序会自动请求权限,无需手动操作
- 如果防火墙阻止程序运行,请添加例外规则
- 确保程序能够访问网络
- 某些杀毒软件可能会误报,请添加信任
- 程序只修改hosts文件,不会执行其他危险操作
错误:无法以管理员权限启动程序
解决:右键点击命令提示符,选择"以管理员身份运行"
错误:获取远程hosts内容失败
解决:检查网络连接,确保能访问GitHub相关网站
错误:更新hosts文件失败
解决:确保程序以管理员权限运行,检查hosts文件是否被其他程序占用
错误:ModuleNotFoundError: No module named 'apscheduler'
解决:运行 pip install -r requirements.txt 安装依赖
2025-10-22 10:00:00 - INFO - GitHub Hosts 自动更新服务启动
2025-10-22 10:00:00 - INFO - 检查间隔: 1 小时
2025-10-22 10:00:00 - INFO - 执行启动时检查
2025-10-22 10:00:00 - INFO - 开始检查GitHub hosts更新
2025-10-22 10:00:01 - INFO - 成功获取远程hosts内容,长度: 1234 字符
2025-10-22 10:00:01 - INFO - 检测到hosts内容变化,需要更新
2025-10-22 10:00:01 - INFO - Hosts文件更新成功
2025-10-22 10:00:01 - INFO - 检查完成: hosts文件更新成功
- 调度器:APScheduler BlockingScheduler
- 网络请求:requests库,支持重试机制
- 权限管理:ctypes调用Windows API
- 日志系统:Python logging模块,支持日志轮转
- 文件操作:pathlib和正则表达式处理
本项目基于MIT许可证开源。
欢迎提交Issue和Pull Request来改进这个项目!