需求:
在linux crontab中配置git定时拉取和提交的命令
如0 */1 * * * cd /services/apps/scripts && /usr/bin/git pull
在实际过程中,上述执行是会报错了的
默认情况下crontab的执行日志会以mail的形式返给当前用户,如果需要查看,直接在控制台执行mail命令就能看到执行日志
错误1:没有权限读取文件
原因:crontab中的运行环境和默认环境不一致,无法读取mac非User目录下的文件
解决方法:将文件夹迁移至User下
错误2:fatal: could not read Username for ‘url’: Device not configured
原因:在默认环境中mac会记住git仓库的账号密码,但crontab环境不知道账号密码
解决方法:进入项目文件夹下open .git/config,在url中加入账号和密码,改为以下格式即可 https://[userName]:[password]@gitee.com/[username]/project.git
完整配置如下:
1 | [core] |
这里需要注意的是:如果用户名密码包含特殊字符,比如@!等等,也是会报错的,需要对特殊字符进行url encode。所以这里建议直接把用户名和密码都url encode之后再填写到url中
如果用户名是`username@126.com,那么encode之后的url就是
https://username%40126.com:[password]@gitee.com/[username]/project.git`
密码同理
错误3:git命令无效
原因:crontab的环境变量中不包含git的路径
解决方法:使用git的绝对路径,如 /usr/bin/git pull origin master