前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >自动拉取 GitHub 仓库更新的脚本

自动拉取 GitHub 仓库更新的脚本

作者头像
浪漫主义狗
发布2023-09-04 15:15:36
4160
发布2023-09-04 15:15:36
举报
文章被收录于专栏:HAUE_LYS'Blog

本文最后更新于 19 天前,其中的信息可能已经有所发展或是发生改变。

自动拉取 GitHub 仓库更新的脚本


由于将 HAUE-CS-WIKI 部署到了我自己的服务器上作为国内镜像站,每次在源站更新后都需要手动拉取镜像站的更新实在是太麻烦了,因此产生了编写该脚本的需求(

读者可根据该脚本思路编写属于你自己的定时任务脚本。


脚本思路


  • 编写脚本文件,能够执行 git pull 命令以及 mkdocs build 构建命令。
  • 对这些命令的执行结果和状态需要保存到相应的日志,以便查询执行状态。
  • 利用 cron 守护进程实现定时执行该脚本文件。

编写脚本文件


代码语言:javascript
复制
#!/bin/bash

# 读取用户环境变量
. /etc/profile
source /root/.bashrc
source /root/.profile

# 导入 mkdocs 环境变量
MKDOCS_PATH="/usr/local/bin/mkdocs"

# 日志文件路径
LOG_FILE="/wiki/log/update.log"
ERROR_LOG_FILE="/wiki/log/error.log"

# 任务执行时间
update_time=$(date +"%Y-%m-%d %H:%M:%S")
tag_bar="====================================================================================================="

# 进入 haue-cs-wiki 目录
cd /wiki/haue-cs-wiki

# 执行 git pull 操作
git_pull_output=$(git pull 2>&1)
git_pull_status=$?

# 执行 mkdocs 构建
mk_build_output=$($MKDOCS_PATH 2>&1)
mk_build_status=$?

if [ $git_pull_status == 0 ] && [ $mk_build_status == 0 ]
then
    echo -e "$tag_bar\n$update_time: no errors occured 😘\n$tag_bar" >> "$ERROR_LOG_FILE"
    echo -e "$tag_bar\n$update_time: git pull successfully 🤗" >> "$LOG_FILE"
    echo -e "$update_time: mkdocs build successfully 😎\n$tag_bar\n" >> "$LOG_FILE"
else
    echo -e "$tag_bar\n$update_time: oops! errors occured 😅\n$tag_bar" >> "$LOG_FILE"
    echo -e "$tag_bar" >> "$ERROR_LOG_FILE"
    if [ $git_pull_status != 0 ]
    then
        echo -e "$update_time: git pull failed 🥵\nError: $git_pull_output" >> "$ERROR_LOG_FILE"
    fi
    if [ $mk_build_status != 0 ]
    then
        echo -e "$update_time: mkdocs build failed 🤡\nError: $mk_build_output" >> "$ERROR_LOG_FILE"
    fi
    echo -e "$tag_bar\n" >> "$ERROR_LOG_FILE"
fi

注意

  • 所有的文件目录均需要指定为绝对路径,防止脚本执行路径出错。
  • 由于后续 cron 定时任务执行时,不会携带用户的环境变量,因此在脚本中需要读入相应用户的配置文件和环境变量。

设置 cron 定时任务


使用 crontab -e 打开定时任务注册表

第一次使用会提示选择需要使用的编辑器,选择适合自己的即可。

在注册表中编辑:

代码语言:javascript
复制
0 0 * * * /bin/bash /path/script.sh

其中 /path/script.sh 为执行脚本文件所在的绝对路径。

然后退出编辑,重新加载:

代码语言:javascript
复制
sudo service cron reload

对于执行时间的设置,在 crontab 文件中,时间表达式由五个 * * * * * 字段组成,分别表示分钟、小时、日期、月份和星期几。

对于时间表达式 * * * * *,每个字段的含义如下:

  1. 第一个字段:分钟(取值范围:0-59)
    • * 表示每分钟都匹配,即每分钟触发任务。
  2. 第二个字段:小时(取值范围:0-23)
    • * 表示每小时都匹配,即每小时触发任务。
  3. 第三个字段:日期(取值范围:1-31)
    • * 表示每天都匹配,即每天触发任务。
  4. 第四个字段:月份(取值范围:1-12)
    • * 表示每个月都匹配,即每个月触发任务。
  5. 第五个字段:星期几(取值范围:0-6,其中 0 表示星期日)
    • * 表示每个星期都匹配,即每个星期触发任务。

例如:设置为 0 0 * * * 表示每天 0:00 执行一次该定时任务。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2023-8-15 2,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 自动拉取 GitHub 仓库更新的脚本
    • 脚本思路
      • 编写脚本文件
        • 设置 cron 定时任务
        相关产品与服务
        云服务器
        云服务器(Cloud Virtual Machine,CVM)提供安全可靠的弹性计算服务。 您可以实时扩展或缩减计算资源,适应变化的业务需求,并只需按实际使用的资源计费。使用 CVM 可以极大降低您的软硬件采购成本,简化 IT 运维工作。
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档