将 Crontab 计划任务加入到 Git 版本控制。通过 Git 来控制 Crontab 计划任务的自动启停。
为什么
- 将 crontab 放到 Git 后有哪些优点?
- 可以避免线上服务器突然崩溃,crontab 无法找回。
- crontab 自动更新计划任务
- 在新增 crontab 任务时,可自动部署,使计划任务即时生效。
- 弥补仅使用 Git 做备份的不足,增加计划任务入口单一,避免遗忘。
- 使计划任务可在指定服务器或多台服务器上执行。
- 不足? 仍然需要先在服务器上运行下计划任务脚本,在保证正常执行后,再将其添加至
crontab
文件。
项目部署流程
在项目的根目录下创建
crontab
文件。在
crontab
文件中,编写crontab
命令。将
crontab
文件,通过git push
提交。Git webhook 自动触发
jenkins
构建完成代码上传。在每台服务器上执行以下命令。
1
2
3
4grep "PROJECT_PATH" /etc/environment || \
echo "export PROJECT_PATH=`grep -E '\broot\b' /data/nginx/conf/nginx.conf | head -n 1 | awk '{print $2}' | grep -Eo '\/data\/htdocs\/[[:alpha:]]*'`" >> /etc/environment && \
source /etc/environment; \
crontab $PROJECT_PATH/crontab
Crontab 文件内容示例
1 | # 注意:为避免新增、更新计划任务异常,导致后续计划任务无法正常运行。请在新增、更新计划任务时,在本文件末尾处追加。 |
- 公共计划任务可根据此处复制粘贴,也可追加计划任务,比如:
nginx
的 log 文件处理脚本等。 - 下面的
51.96
计划任务 是为了只在51.96
服务器上执行计划任务,若不加[ ``hostname -s`` = "web96" ]
&& 代码,则将在所有生效的服务器上执行计划任务。项目都会有多台 web 服务器,而计划任务通常只需要在其中一台上执行。若不知项目要部署到那台服务器上,可在服务器上执行hostname -s
,将结果值替换示例中的web96
。 - 环境变量
$PROJECT_PATH
是项目的根目录路径。
Gist for github
https://gist.github.com/codezm/4e0266d30891bd7de076442a797a1e0a