如何通过CRON每日自动拉取GitHub仓库并覆盖本地文件?
实现GitHub静态仓库每日自动覆盖更新的CRON方案
1. 创建自动更新脚本
用git fetch + reset --hard可以直接强制覆盖本地文件,完全同步远程仓库最新版本,适配你的静态文件场景。
创建可执行脚本(比如/usr/local/bin/update-speedtest.sh),内容如下:
#!/bin/bash # 切换到测速仓库目录,失败则退出 cd /usr/local/www/Speed-Test || exit 1 # 拉取远程仓库最新代码 git fetch origin # 强制重置本地分支到远程main分支,覆盖所有本地文件 git reset --hard origin/main # 如果仓库包含子模块,取消下面注释以同步子模块(当前项目不需要,可留作备用) # git submodule update --init --recursive
给脚本添加执行权限:
chmod +x /usr/local/bin/update-speedtest.sh
2. 手动测试脚本
先手动运行脚本验证效果:
/usr/local/bin/update-speedtest.sh
执行后检查/usr/local/www/Speed-Test目录下的文件是否已更新,同时确认局域网内测速站点仍可正常访问。
3. 配置CRON定时任务
编辑用户crontab:
crontab -e
添加以下规则(示例为每天凌晨3点执行更新,可根据需求调整时间):
0 3 * * * /usr/local/bin/update-speedtest.sh >> /var/log/speedtest-update.log 2>&1
0 3 * * *:代表每天3点整执行>> /var/log/speedtest-update.log 2>&1:将脚本输出和错误信息写入日志文件,方便后续排查问题
保存退出后,CRON会自动加载新的任务,无需额外重启。
关键说明
- 使用
git reset --hard origin/main而非git pull:pull默认会尝试合并本地修改,而reset --hard会直接丢弃本地所有变更,完全同步远程最新版本,正好匹配你"直接覆盖"的需求。 - 确保运行CRON的用户对仓库目录有读写权限,避免执行失败。
内容的提问来源于stack exchange,提问作者GJSchaller
相关产品推荐
相关产品推荐

