web-dev-qa-db-ja.com

cronを使用してgitリポジトリに自動コミットする方法は?

私はたくさんの答えを調べます この主題について 、しかしここで何かが間違っています、説明させてください。 cronをよりクリーンにするために、このスクリプトを作成します:)

#!/bin/bash

cd /home/valter.silva/Development/git/valter/ 
/usr/bin/git add -A 
/usr/bin/git commit -am "update `date`"
/usr/bin/git Push

次に、それを私のcronに追加します。valter.silva's cronnotmy root cron

00 * * * * /home/valter.silva/Development/git/valter/scripts/git/sync.sh

Cronを再起動します

Sudo service cron restart
cron stop/waiting
cron start/running, process 6047

Aaand ..何も起こりません..

しかし、コマンドラインでスクリプトを実行すると、すべてが正常に機能します。パス全体をcronスクリプトに配置しないと、正しく機能しない場合があることを私は知っています。そして、rootのcronではなく、cronを使用してそれを行う必要があります。

では、ここで何が問題になっていますか?何か案は ?ありがとうございました!

udpate

Terdonの提案に従って操作をログに記録しますが、すべて問題ないようですが、Pushプロセスは問題ありません。どうして ?

[master ad5d001] update Fri Aug  9 11:00:01 BRT 2013
 9 files changed, 1224 insertions(+), 364 deletions(-)
 create mode 100644 scripts/centreon/4.answers~
 create mode 100644 scripts/centreon/6.importing database
 create mode 100644 scripts/centreon/6.importing database~
 create mode 100755 scripts/centreon/7.upgrade.sh
 create mode 100755 scripts/centreon/7.upgrade.sh~
 create mode 100644 scripts/centreon/8.answers
 create mode 100644 scripts/centreon/8.answers~
# On branch master
# Your branch is ahead of 'Origin/master' by 1 commit.
#
nothing to commit (working directory clean)
# On branch master
# Your branch is ahead of 'Origin/master' by 1 commit.
#
nothing to commit (working directory clean)
# On branch master
# Your branch is ahead of 'Origin/master' by 1 commit.
#
nothing to commit (working directory clean)
# On branch master
# Your branch is ahead of 'Origin/master' by 1 commit.
#
nothing to commit (working directory clean)
3
Valter Silva

まとめると、リンクが簡略化されているので、 hutiのブログ投稿 に基づいて回答を探している人にとって読みやすくなっています。

したがって、sync.shの場合、プッシュ用に-u Origin masterを追加します。

#!/bin/bash

cd /home/valter/git-project/
/usr/bin/git add -A 
/usr/bin/git commit -am "Daily update"
/usr/bin/git Push -u Origin master

スクリプトがbashで実行できることを確認してください。

Sudo chmod 765 ~/sync.sh

次に、/etc/crontabに行を追加できます。

Sudo nano /etc/crontab # To edit the file
01 18  *  *  * root  /home/valter/sync.sh

Cronジョブを有効にするには、必ず再起動してください。これで、スクリプトは毎日18:01に実行されます。変更がない場合でも、何もプッシュされません。

1
Sylhare

私はgitマスターではありませんが、ローカルのgitテストリポジトリでいくつかのgitテストを行います。 git Pushを実行すると、出力は次のようになります。

fatal: No configured Push destination.
Either specify the URL from the command-line or configure a remote repository using

git remote add <name> <url>

and then Push using the remote name

git Push <name>

Q:git remote addコマンドを使用してリモートリポジトリを構成しましたか?はいの場合は、リモートリポジトリの名前でgitPushを実行してみてください。いいえの場合は、構成するか、コマンドライン(git Push git://Host.xz[:port]/path/to/repo.git/)でリモートリポジトリのURLを指定してgitPushを使用します。

1
Pavel Stárek

なぜあなたは何かが起こると期待しますか? cronに、スクリプトを毎時、正時に実行するように指示しました。たとえば、13:02にcrontabを変更した場合、14:00まで何も起こりません。

時間が来るまでしばらく待ってみてくださいXX:00、スクリプトを実行する必要があります。ああ、cronを再起動する必要はありません。新しいcrontabを読み取り、次に実行する必要があるときに実行します。

十分に待機してもスクリプトが実行されない場合は、エラー出力をリダイレクトして、何かが起こっているかどうかを確認してください。

00 * * * * /home/valter.silva/Development/git/valter/scripts/git/sync.sh 2> /home/valter.silva/error.txt

また、ダミーのcronジョブを設定して、それが機能するかどうかを確認してください。

00 * * * * date > /home/valter.silva/date.txt
0
terdon