zt日記

書いているのは Kazuhiro NISHIYAMA a.k.a. ZnZです。
2001|09|10|11|12|
2002|01|02|03|04|05|06|07|08|09|10|11|12|
2003|01|02|03|04|05|06|07|08|09|10|11|12|
2004|01|02|03|04|05|06|07|08|09|10|11|12|
2005|01|02|03|04|05|06|07|08|09|10|11|12|
2006|01|02|03|04|05|06|07|08|09|10|11|12|
2007|01|02|03|04|05|06|07|08|09|10|11|12|
2008|01|02|03|04|05|06|07|08|09|10|11|12|
2009|01|02|03|04|05|06|07|08|09|10|11|12|
2010|01|02|03|04|05|06|07|08|09|10|11|12|
2011|01|02|03|04|05|06|07|08|09|10|
2012|04|05|06|09|

この日記にはツッコミを入れられます。 ツッコミを入れたい日付をクリックすると、フォームが現れます。

xreaでtDiaryを使う方法はxrea.com で tDiary を使う方法インストールメモXREA + tDiary + Namazuをどうぞ。


2010年02月02日(Tue)

incron で fetch_changesets

commit がないときまで cron で redmine の "Repository.fetch_changesets" を動かし続けるのは無駄だと思って、 incron を使ってコミットがあったときに fetch_changesets するようにしてみた。

流れとしてはまず subversion の post-commit hook の途中に

touch /home/redmine/committed-stamp

のような処理を埋め込み、 committed-stamp の owner を www-data にしておく (post-commit hook の実行権限のユーザで、この場合は mod_dav_svn 経由にしているので www-data になる)。

次に crontab(1) と同様に incrontab(1) で

/home/redmine/committed-stamp IN_CLOSE,IN_NO_LOOP /home/redmine/fetch_changesets.sh

のような内容を登録する。

fetch_changesets.sh は今まで cron で実行していたスクリプトを改造したもので、以下のような内容。 incron は vixie-cron と違って、出力をメールで送信してくれる機能はないようなので、リダイレクトして何か出力されていればメールするようにしてみた。

sleep は上の IN_NO_LOOP とあわせて連続で commit があったときに連続実行される回数を減らすために追加してみた。

$ cat fetch_changesets.sh
#!/bin/sh
cd "$(dirname "$0")"
if [ redmine != `id -un` ]; then
    echo $0: must run as redmine 1>&2
    exit 1
fi
sleep 10
exec >fetch_changesets.log 1>&2
if [ -d redmine ]; then
    cd redmine
    /opt/ruby-enterprise/bin/ruby script/runner "Repository.fetch_changesets" -e production
fi
if [ -s ../fetch_changesets.log ]; then
    mail -s fetch_changesets redmine < ../fetch_changesets.log
fi

copyright © 2001-2013 ZnZ
Key fingerprint = 6E14 2C9C DBD7 874D 8B3C CAA8 9B58 5538 ED7E 1B73