̃Gg[͂ĂȃubN}[Nɒlj

cron から自動で git push する



SSH プロトコルを利用して git のリモートリポジトリを操作している場合ですが、cron から自動で git push したい時、ssh の秘密鍵を明示的に指定して git push する必要があります。
その実現方法のメモになります。


1)下記のような SSH のラッパースクリプト(git-ssh.sh)を作成します。

  • git-ssh.sh
#!/bin/sh
exec ssh -oIdentityFile=/path/to/.ssh/id_rsa "$@"
  • /path/to/.ssh/id_rsa (パーミッション:600)


2)下記のように GIT_SSH 環境変数に1で作ったスクリプトを指定します。

% export GIT_SSH=/path/to/git-ssh.sh
  • /path/to/git-ssh.sh (パーミッション:755)


上記を行うことで、/path/to/.ssh/id_rsa の秘密鍵を利用して git push が実行されます。


具体的な cron は下記のようになります。

  • /etc/cron.d/git_cron
1 1 * * * <USER> cd /path/to/projects/proj && git add -A > /dev/null 2>&1 ; git commit -m "自動バックアップ (`date`)" > /dev/null 2>&1 && export GIT_SSH=/path/to/.ssh/git-ssh.sh ; git push
  • <USER>: 実行ユーザー(ssh のパスフレーズなしでリモートリポジトリにアクセスできるユーザー)
  • /path/to/projects/proj: git でバージョン管理されているディレクトリ
  • /dev/null 2>&1: 標準出力、標準エラーを抑制していますが、不要なら削除してください(/dev/null での運用も要検討)





unix/command/git/cron_git_push.txt