ファイルやディレクトリのイベントに応じてジョブを実行する – incron
こんにちは。kiccoです。
小倉競馬が終わってしまいました。小倉は逃げ・先行馬が非常に有利な競馬場です。
その特性を活かし一定の法則に従って馬券を購入したところ、回収率が180%を超えました。
次回の開催がめっさ楽しみです♪
さて今回は incron(inotify cron) の紹介です。
cron は指定した時刻に指定したプログラムを実行します。
incron は、特定のファイルまたはディレクトリのイベントを検知した際に指定したコマンドを実行してくれます。
例えば、/etc/hosts.allow が修正されたら指定アドレスにメールを送る、といった使い方ができます。
それでは実際に作業してみましょー。
作業は CentOS5 で行います。
# cat /etc/redhat-release
CentOS release 5 (Final)
Dagのリポジトリに incron のパッケージがありますのでそれを使います。
Dagのリポジトリ設定です。
# cat /etc/yum.repos.d/dag.repo
[dag]
name=Dag RPM Repository for Red Hat Enterprise Linux
baseurl=http://apt.sw.be/redhat/el$releasever/en/$basearch/dag
gpgcheck=1
enabled=1
gpgkey=http://dag.wieers.com/packages/RPM-GPG-KEY.dag.txt
それでは incron をインストールします。
# yum install incron
<省略>
Installing:
incron i386 0.5.8-1.el5.rf dag 327 k
<省略>
Installed: incron.i386 0:0.5.8-1.el5.rf
Complete!
今回は細かい設定は省いてデフォルトのまま使ってみます。
# /etc/init.d/incrond start
Filesystem event daemon (incrond) を起動中: [ OK ]
# ps uax | grep [i]ncrond
root 1575 0.0 0.1 2900 580 ? Ss 17:44 0:00 incrond
これで使える状態になりました。
それではジョブを登録してみましょう。
cron の場合、ジョブの登録は crontab コマンドで行います。
incron の場合、incrontab コマンドで行います。わかり易くて良いですね(^ ^)b
incrontab の書式です。
監視対象ファイル/ディレクトリ名 イベント コマンド
't’オプションで指定できるイベントが確認できます。
# incrontab -t
主なイベントと説明です。
イベント名 | 説明 |
---|---|
IN_ACCESS | ファイルがアクセスされた |
IN_MODIFY | ファイルが修正された |
IN_ATTRIB | メタデータが変更された(permission、タイムスタンプ、UID、GID など) |
IN_OPEN | ファイルがオープンされた |
IN_CREATE | 監視対象ディレクトリ内でファイルやディレクトリが作成された |
IN_CLOSE_WRITE | 書き込みのためにオープンされたファイルがクローズされた |
IN_CLOSE_NOWRITE | 書き込み以外のためにオープンされたファイルがクローズされた |
IN_CLOSE | IN_CLOSE_WRITE と IN_CLOSE_NOWRITE の両方を対象 |
IN_DELETE | 監視対象ディレクトリ内でファイルやディレクトリが削除された |
IN_MOVED_FROM | ファイルが監視対象ディレクトリ外へ移動された |
IN_MOVED_TO | ファイルが監視対象ディレクトリ内へ移動された |
IN_MOVE | IN_MOVED_FROM と IN_MOVED_TO の両方を対象 |
IN_ALL_EVENTS | 全イベントを対象 |
それでは試しに以下のジョブを設定してみます。
/etc/hosts.allow が修正されたら /var/log/messages にログを出力する
ジョブを登録します。
# incrontab -e
/etc/hosts.allow IN_MODIFY logger -t incron "hosts.allow modified."
ジョブを登録したらテーブルをリロードさせます。
# incrontab -d
requesting table reload for user 'root'...
request done
それでは登録したジョブが動作するかテストしてみましょう。
予め /var/log/messages を tail っておきます。
# tail -f /var/log/messages
/etc/hosts.allow を修正してみましょう。コメント行を追加してみます。
# date; echo "#" >> /etc/hosts.allow
2009年 3月 5日 木曜日 19:25:04 JST
/var/log/messages にログが出力されてます。
# tail -f /var/log/messages
(^-^)//""パチパチ
Mar 5 19:25:04 casper incron: "hosts.allow modified."
と、いったところで簡単ですが動作を確認できました。
次回はもう少し深く掘り下げてみます。
こちらのサイトを参考にさせて頂きました。
Manpage of INOTIFY
ファイル/ディレクトリの変更に応じて任意のジョブを実行するincron
それではまた(^o^)!
ディスカッション
コメント一覧
まだ、コメントがありません