Linux下Cronjob执行git pull无效果的问题排查求助
Cron执行git pull无反应的排查方案
- 环境变量不匹配:Cron的默认PATH比登录用户的PATH范围小,大概率找不到git命令。先在终端执行
which git拿到git的绝对路径(比如/usr/bin/git),把crontab里的git替换成这个绝对路径就行。 - Git认证失效:手动执行时用的SSH密钥或凭证缓存,Cron运行时没法继承。解决办法:
- 给cron运行的用户(这里是ubuntu)配置无密码SSH密钥对,把公钥加到远程仓库的授权列表里
- 如果用HTTPS方式,执行
git config --global credential.helper store,手动拉取一次输入凭证,之后cron就能自动用这个凭证
- 错误输出被掩盖:你现在把所有输出都扔去
/dev/null了,根本看不到执行时的错误。临时改下重定向,把日志写到文件里:
之后看这个日志就能知道具体哪出问题了*/1 * * * * cd /var/www/html && /usr/bin/git pull origin master && chown -R ubuntu:ubuntu /var/www/html/* >> /var/log/git_pull_cron.log 2>&1 - 目录权限细节:确认cron运行的用户对
/var/www/html有完整读写权限,虽然手动执行正常,但cron的用户上下文可能有细微差异(比如没加载用户的环境变量导致权限判断不同)
内容的提问来源于stack exchange,提问作者Jorge Brian Moreno Tapia
相关产品推荐
相关产品推荐

