ファイル/ディレクトリの変更に応じて任意のジョブを実行するincron:Leverage OSS
時刻指定型のジョブ実行である伝統的なcronと比べると、ファイルシステムの変更を検出して指定のコマンドを実行させるというコンセプトで作られたcronクローン「incron」は大きな将来性を期待させる。
Linuxでジョブのスケジューリングを行う定番ツールであるcronについては、その機能と活用法を詳細に解説した多数のドキュメント、チュートリアル、ガイドの類が存在しており、いまさら特に説明する必要はないだろう。こうした伝統的なcronで行えるのが時刻指定型のジョブ実行であるのに対し、ファイルシステムの変更を検出して指定のコマンドを実行させるというコンセプトで作られたcronクローンの一種にincronというツールが存在する(正式名称はinotify cron)。incronを使用するための設定としては、どのようなファイル/ディレクトリの変更を監視対象とするかおよび、そこでの変更発生時に実行すべきジョブの登録が必要となる。
Fedoraユーザーの場合はyumを介したincronのインストールが行えるようになっており、具体的には「yum install incron」というコマンドを実行すればいい。インストール後に行うべき作業は、incronデーモンの起動および、それに引き続くジョブのスケジューリング設定である。それにはまずroot権限を取得し「service incrond start」コマンドの実行によりincronデーモンを起動させ、次に起動時の自動起動を設定させるための「chkconfig incrond on」コマンドを実行しておく。
この場合のジョブのスケジューリングは、crontabと同様のincrontabと呼ばれるコマンドを介して、テーブルファイルへの登録をする仕様となっている。incrontabで登録する各行には、個々のファイル名に続けて、監視対象とするファイルシステムの変更イベントをコンマ区切りで一覧したリストおよび、当該イベントの発生時に実行すべきコマンドを記述すればいい。こうして登録しておいたジョブは、指定しておいたファイルやディレクトリの変更をトリガとして実行されることになる。incronでモニタ可能なファイルシステムの全イベントを確認したければ、「incrontab -t」コマンドを使用すればいい。後記に一覧したものがこうして作成されるリストだが、ここには個々の説明が並記してある。
- IN_ACCESS:当該ファイルがアクセスされた
- IN_MODIFY:当該ファイルが変更された
- IN_ATTRIB:メタデータが変更された(パーミッション、拡張属性、タイムスタンプなど)
- IN_CLOSE_WRITE:書き込み可能ファイルの1つが閉じられた
- IN_CLOSE_NOWRITE:書き込み不可能ファイルの1つが閉じられた
- IN_OPEN:ファイルの1つが開かれた
- IN_MOVED_FROM:当該ディレクトリの外にファイルが出された
- IN_MOVED_TO:当該ディレクトリの中にファイルが入れられた
- IN_CREATE:当該ディレクトリ中にファイル/ディレクトリが新規作成された
- IN_DELETE:当該ディレクトリ中からファイル/ディレクトリが削除された
- IN_DELETE_SELF:当該ファイル/ディレクトリ本体が削除された
- IN_CLOSE:IN_CLOSE_WRITEとIN_CLOSE_NOWRITEの双方を対象とする
- IN_MOVE:IN_MOVED_FROMとIN_MOVED_TOの双方を対象とする
- IN_ALL_EVENTS:ここに一覧した全イベントを対象とする
- IN_DONT_FOLLOW:シンボリックリンクは参照させない
- IN_ONLYDIR:当該パスがディレクトリの場合のみ監視させる
- IN_MOVE_SELF:当該ファイル/ディレクトリ本体が移動された
例えば、各自のhomeディレクトリ中にファイルやディレクトリが新規作成された時点で指定のオーディオファイルを自動再生させたいという場合は、「/home/linuxlala IN_CREATE paplay /usr/share/sounds/pop.wav」といったincrontabのエントリを登録しておけばいい。同じく「/home/linuxlala IN_CREATE rm -rf $@/$#」も同様のイベントをトリガとして実行されるエントリだが、この場合は少々悪質な操作が行われることになる。つまりこのエントリをincrontabファイルに登録しておくと、当該ユーザーのhomeディレクトリで何らかのディレクトリやファイルが作成された段階で、それらは即座に削除されてしまうのだ。実はこの場合、ワイルドカードと呼ばれる特殊な記号($@/$#)を用いることで、新規に作成されたファイル/ディレクトリのフルパスをrm -rfコマンドに渡しているのである。
より実用的な用途でこうしたワイルドカードが役立つのは、実行したいスクリプトやコマンドにファイル名の情報を渡したいという場合であろう。例えば、指定されたファイル中から“呪いの言葉”(curse word)を削除するスクリプトが手元にあり、/home/linuxlala/Documentsディレクトリに作成されるファイルはすべてその処理対象としたい場合は、「/home/linuxlala/Documents IN_CLOSE_WRITE /home/linuxlala/replace_curse_words.sh $@/$#」というincrontabエントリを用意しておけばいいことになる。このエントリではIN_CREATEではなくIN_CLOSE_WRITEを指定しているが、これはIN_CREATEイベントはディレクトリであっても生成されるのに対して、IN_CLOSE_WRITEはファイルのみが対象となるからである。
$@と$#のワイルドカードは、監視対象とされるファイルのパスおよび当該イベントに関係したファイル名をそれぞれ返すものだが、そのほかにもイベントフラグをテキストおよび数値形式で処理する$%や$&などのワイルドカードも利用できる。
なおincrontabファイルの内容を書き換えた場合は、「incrontab -d」コマンドを実行してユーザーテーブルをリロードさせておく必要がある。このアップデートを行わなかった場合は、変更前の指定に基づいたincronの処理が実行され続ける。
このように多様な処理が行えるincronだが、現行バージョンでは対処できない処理も幾つか存在している。例えばわたしが試した限り、新規に作成したファイルをGeditで開かせるという処理はすべて失敗した。その際に設定したエントリは「/home/linuxlala IN_CLOSE_WRITE gedit $@/$#」というものである。これと同様の、指定イベントをトリガにしてincronにアプリケーションを起動させるという処理は、すべてのグラフィカルアプリケーションで失敗している。つまりファイルの新規作成あるいは削除や移動時に、Gedit、Akregator、gnome-terminalなどを起動させるエントリを各種記述してみたのだが、これらのアプリケーションはいっこうに起動してくれないのだ。
次に少し発想を変えて、homeディレクトリでの新規ディレクトリ作成時にGeditを介して当該ディレクトリ中にquotes.txtというファイルを作成させる「/home/linuxlala IN_CREATE gedit /home/linuxlala/quotes.txt」というエントリをincronに処理させることにしてみた。ところが結局のところ、この処理もうまく動作しなかったのである。同様に/usr/bin /geditといったグラフィカルアプリケーションのフルパスを指定しても結果は改善されなかった。その一方でincronを介した各種スクリプトの呼び出し、コマンドに対するファイル名の引き渡し、mplayerによるオーディオ/mp3ファイルの演奏開始などは、すべて問題なく処理されているのである。このようにグラフィカルアプリケーションをうまく扱えない理由については、開発者に問い合わせてみたものの今のところ返事はもらえていない。
incronは小型ながらも大きな将来性を期待させるユーティリティだが、現行バージョンではグラフィカルアプリケーションに未対応であったり再帰的な処理ができないなど、若干の問題点が残されている。しかもincronがディレクトリ階層を再帰的に監視できない点は、かなり以前からTO-DOリストに掲載されたままになっているのだ。こうした現行のincronに対するわたし個人の評価は、コンセプト的には優れているものの、メインストリームのツールとなるには今一歩の開発努力が必要というものである。
Shashank Sharmaは、フリー/オープンソース系ソフトウェアの初心者向け記事の執筆およびLinux.comフォーラムボードの管理を行なっており、Apress社から刊行されている『Beginning Fedora』の共著者でもある。
Copyright © 2010 OSDN Corporation, All Rights Reserved.
関連記事
ネットワーク上でのシステム管理を容易にするPuppet
システム管理コマンドを複数のマシンに対して発行できるPuppetは、宣言型言語を学ぶ手間が掛かるが、ソフトウェアのインストールや設定の手間を大きく軽減してくれる強力なツールだ。
Firewall Builderによるファイアウォールの設定
IPトラフィックのフィルタリング設定に役立つFirewall Builderは、定義したパケットフィルタリングポリシーとその実装を分けることで、ハードウェアに依存しない運用に役立ってくれる。
ネットワークセキュリティ管理者のためのディストリビューション Network Security Toolkit
ネットワークの監視・解析・セキュリティについて責任を持たなければならないネットワークセキュリティ管理者にとって、「Network Security Toolkit」は常用するに値する。
Kismetパケットスニッファ入門
ネットワークセキュリティの専門家をこれから目指そうというあなたにワイヤレスネットワーク検出/スニッファ/侵入検知システムである「Kismet」をお勧めしよう。これを使えば、あなたにもシステムの中に潜む悪意を見つけることができるかもしれない。
システム管理者が作り上げるネットワーク管理ツール Func
Funcと呼ばれるネットワーク管理ツールは、OpenViewやTivoliのような大規模製品を必ずしも必要としない人にとって有益なものになるだろう。- Bastille:自学にも適したセキュリティ評価ツール
Bastilleはセキュリティの侵害が起こるのを待って反応するのではなく、システムの脆弱性を取り除くことによってセキュリティ侵害を未然に回避する。システムセキュリティを向上させるためのこのソフトウェアを紹介する。
ファイルのセキュリティを強化する各種の暗号化ツール
システム全体をカバーするセキュリティソリューションが必要とされる一方で、ファイルやディレクトリ単位で暗号化を施したいという状況も存在するはずである。ここでは後者の観点から役立つ暗号化ツールを幾つか紹介することにしよう。
ratproxy――Webアプリケーションのセキュリティレベルを検証するGoogle提供ツール
先日Googleからリリースされたプロキシ型の脆弱性発見ツール「ratproxy」。高度に複雑化した最近のWebアプリケーションのセキュリティ試験を行う際に役立つ同ツールを使ってみた。
