« WineベースのWindows互換ソフトのCodeWeaversが一日だけ無料配布! | メイン | 祝Ubuntu 8.10 Intrepid Ibexリリース! »

ファイルイベントでプログラムを起動できるincronを使ってみた

指定したディレクトリ内のinotifyのファイルイベントを受けてプログラムを起動できるincronを使ってみました。今でもファイルの変更監視はポーリングしないといけない等と考えてる人もおられるようなのでメモ。

inotifyはLinuxのシステムコールレベルで監視対象のファイルの変更やアクセスを通知してくれる機能。これを使うと余分な負荷をさほどかけずに当該のファイルを監視できます。通知イベントは直ちに行われるので、あたかもその対象プログラムと同期したようなファイル処理などを容易に実装できます。

このincronはcronやinetdのようなinotifyのサーバとして動作し、指定されたディレクトリ内のファイルイベントを監視してプログラム起動を行ってくれます。

インストール

FedoraやCentOS等のrpm系では

yum install incron

Ubuntu/Debian等ではapt-getで。

apt-get install incron

使い方

/etc/incron.dに任意の名前で以下のような内容のファイルを作成します。編集用にincrontabコマンドがあります。

<PATH> <FS Event> <CommandLine>

/var/log  IN_CLOSE_WRITE,IN_NO_LOOP logcheck $@/$#

$@がパス、$#がファイル名に置換されます。詳細は"man 5 incrontab"で。

問題というか

inotifyの機能をそのまま使っているようなので、再帰的な監視機能はありません。inotify-utilsのinotifywaitなんかにはちゃんと再帰的にディレクトリをたどっていってくれる機能があるのですが。

使い道

ログファイルの監視を行って、なにか出力されたらすぐに処理する。 例えばsshのログインを監視しておくとか。特にサーバでは他にもいろいろ使い道はありそうです。

開発ディレクトリをチェックしておき、更新したら自動でcheckinとかmakeするとか。上手く使えばDropboxもどきが簡単に実装できます。後は/etcを監視しておいて自動でバックアップとか。

個人的にはこのブログの更新を行ったらapacheのキャッシュ更新とか。

他には独立した処理プログラム同士を使ってカメラを使った監視と画像処理の組み合わせに使ったりとか組み込みにも負荷を増やさずに使えますね。

トラックバック

このエントリーのトラックバックURL:
http://blog.browncat.org/cgi-bin/mt/mt-tb-abc.cgi/794


コメントを投稿

(お書きになったコメントはすぐには表示されません。ご了承ください。)


About

2008年10月29日 19:16に投稿されたエントリーのページです。

ひとつ前の投稿は「WineベースのWindows互換ソフトのCodeWeaversが一日だけ無料配布!」です。

次の投稿は「祝Ubuntu 8.10 Intrepid Ibexリリース!」です。

他にも多くのエントリーがあります。メインページアーカイブページも見てください。

           

カテゴリー

Powered by
Movable Type 3.36

Twitter


最近のエントリー

デル株式会社ads

注目エントリー