我正在设置服务器,并且我希望服务器中的git存储库与原始服务器(Github)保持最新。我试图运行一个cron作业,该作业每分钟更新一次服务器中的存储库。在我的Mac PC上成功了。
crontab:
* * * * * bash /home/ubuntu/venv/App/deployer.bash >> /home/ubuntu/venv/App/Logs/deployer.txt 2>&1
这是服务器中发生故障的部分:
git fetch --all
git reset --hard origin/master
错误:
Fetching origin
Permission denied (publickey).
fatal: Could not read from remote repository.
Please make sure you have the correct access rights and the repository exists.
error: Could not fetch origin
在crontab之外一切正常。 例如 : 我可以在没有sudo的情况下执行git repo中的所有git命令。 使用sudo时,我会得到与cronjob中相同的错误。
更新:
找出导致问题的原因:
crontab表达式中的2>&1正在写入标准错误,这是非常正确的。 当我在crontab之外运行命令时,它从未要求进行身份验证。但是在crontab的每次执行中,命令都要求进行身份验证
现在有人可以解释为什么这会导致这样的错误吗?
答案 0 :(得分:0)
每次执行git命令之前,都将ssh密钥添加到ssh-agent中。这就是我所做的。
我在cronjob中添加了以下命令:
eval `ssh-agent -s` && ssh-add ~/.ssh/id_rsa && ssh-add -l
git fetch --all && sleep 2s && git reset --hard origin/master