Mac Cron任务运行Git拉取失败 手动执行Shell脚本正常问题咨询
问题根因
crontab运行时使用非交互的独立shell环境,无法读取你当前登录用户的密钥环、Git凭证存储中保存的Bitbucket登录信息,因此会触发密码读取失败报错。
凭证配置方案(二选一即可)
方案1:SSH Key(更推荐自动化场景使用)
- 执行
ssh-keygen -t ed25519生成SSH密钥,生成过程中passphrase输入项直接留空,避免自动化执行时需要交互输入口令 - 将生成的
~/.ssh/id_ed25519.pub公钥内容,添加到你的Bitbucket账号的SSH密钥设置中 - 进入本地仓库目录,将远程仓库地址从HTTPS格式切换为SSH格式:
git remote set-url origin git@bitbucket.org:jacksonRaju124/你的仓库名.git - 手动执行一次
git fetch验证连通性,验证通过后crontab即可正常调用
方案2:App Password配合HTTPS凭证存储
- 进入Bitbucket账号设置页面生成App Password,权限勾选仓库读取相关权限
- 执行
git config --global credential.helper store配置Git凭证永久存储 - 手动执行一次
git fetch,用户名填写Bitbucket账号名,密码填写刚生成的App Password,执行成功后凭证会自动保存在~/.git-credentials文件中 - 确保crontab的执行用户和你执行上述配置的用户为同一账号,否则会出现凭证读取失败的问题
自动执行git pull需要的额外配置
- 脚本中所有路径替换为绝对路径,比如将
cd ios_app_proj/src改成cd /home/你的用户名/ios_app_proj/src,crontab默认工作目录为执行用户家目录,相对路径会导致找不到仓库 - 配置Git拉取合并策略,避免合并冲突时触发交互要求:执行
git config --global pull.rebase false,如果需要用变基模式可以改成true - 建议在脚本中添加日志输出方便排查问题,修改后脚本示例:
cd /home/你的用户名/ios_app_proj/src && git fetch --all && git checkout master >> /var/log/git_auto_exec.log 2>&1
内容的提问来源于stack exchange,提问作者Jeff Bootsholz
相关产品推荐
相关产品推荐

