サーバーをセットアップしていますが、サーバーのgitリポジトリをオリジンサーバー(Github)で最新の状態にしたいと考えています。サーバーのリポジトリを毎分更新するcronジョブを実行しようとしました。これは私のMacPCで成功しました。
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リポジトリ内のすべてのgitコマンドを実行できます。sudoを使用すると、cronjobと同じエラーが発生します。
更新:
問題の原因を突き止めました:
crontab式の2>&1は標準エラーを書き込んでおり、非常に正しかった。crontabの外部でコマンドを実行したとき、認証を要求することはありませんでした。しかし、実行のたびにcrontabで、コマンドは認証を要求しています
なぜこれがそのようなエラーを引き起こすのか誰かが説明できますか?
gitコマンドを実行する前に毎回ssh-agentにsshキーを追加すると機能しました。これが私がしたことです。
cronjobに以下のコマンドを追加しました:
eval `ssh-agent -s` && ssh-add ~/.ssh/id_rsa && ssh-add -l
git fetch --all && sleep 2s && git reset --hard origin/master
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加