前回、ファイル・ディレクトリの変更について監視する、「inotify」という機能についてを紹介したが、今回紹介するのはその機能を利用してプログラムを実行させる『incron』というツールだ。
cronと似たようなもので、cronは時間が来たらプログラムを実行させるが、incronではファイルの変動を契機にプログラムを実行させる。

1.インストール

まずはincronのインストールから。
以下のコマンドを実行する。

Debian/Ubuntuの場合

apt-get install incron

RHEL系の場合

yum install incron

インストール完了後、incronの起動および自動起動設定を行う。

Debian/Ubuntuの場合

service incron start
update-rc.d incron enable

RHEL系の場合

service incrond start
chkconfig incrond on

2.incronの設定

次に、incronの設定を行う。
設定方法はcronと同じように、incrontabというコマンドを用いて設定する。

incrontab -e

incrontabでの記述は、以下の順で記述し、スペースで区切る。
トリガーとなるイベントが複数ある場合は、「,(カンマ)」で区切って記述する。

監視対象ファイル トリガーとなるイベント 実行コマンド

2017/02/22 追記
実行コマンドでは、以下のワイルドカードが指定できる。例えば、ディレクトリ監視時は「$@/$#」でイベントの発生したファイルのフルパスを取得できる。

  • $$ … 「$」を使用する
  • $@ … モニタリングしていたPATH
  • $# … イベントの発生したファイル名
  • $% … イベントフラグ名(テキストベース)
  • $& … イベントフラグ番号

トリガーイベントについては、「incrontab -t」で出力、確認が可能。
イベントの種類・意味については、inotifyと同じとなっている。

イベント名 イベント発生タイミング
IN_ACCESS readなどでアクセスされた
IN_MODIFY writeなどでファイル内容が変更された
IN_ATTRIB アクセス件やタイムスタンプなどのメタデータが変更された
IN_CLOSE_WRITE 書き込みモードでオープンされた後クローズされた
IN_CLOSE_NOWRITE 読み込みモードオープンされた後クローズされた
IN_CLOSE オープンモードに関わらずクローズされた
IN_OPEN オープンされた
IN_MOVED_TO 対象ディレクトリ内へ移動された
IN_MOVED_FROM 対象ディレクトリ内から移動された
IN_MOVE 対象自身が移動された
IN_CREATE 対象ディレクトリ内で新規作成された
IN_DELETE 対象ディレクトリ内で削除された
IN_DELTELE_SELF 対象自身が削除された
IN_UNMOUNT 対象を含むファイルシステムがアンマウントされた

記述完了後、設定内容を反映するため以下のコマンドを実行する。

incrontab -d

設定ファイルなどを監視対象として、実行コマンドとしてサービスの再起動などを設定してあげるなど、使い道は様々だ。