実務で監視のスクリプトを書くことがあったんでメモしときます。
監視検知とは例えばあるディレクリに変化(ファイルの作成・更新・削除など)があった時に、それをトリガーにして何らかの処理を行うと言う仕組みになります。
私が行ったのはあるディレクリを監視しておき、画像がダウンロードされたら、自動的にあるシェルスクリプトを走らせて、他の画像と合成すると言う処理です。
色々と調べたので(私ではなくて上司に相当する人ですが(汗))ここでメモります。
incrond
Linuxには標準で入っているようです。名前の通り、cronが時間でトリガーになるように、こちらはイベントでトリガーになります。
簡単に使えそうだったのですが、いかんせん再帰処理ができず、特定フォルダを監視してもその最下部まで監視できないと言う欠陥があるため、ボツに。
inotify
これまでLinux標準で入ってます。
情報もそこそこあり、簡単に使えそうですが、主にサーバー監視などに使われる用途(変更されたファイルの統計情報などをだす)で今回の用途にそぐわなかったので却下。
inotify-toolsでファイルやディレクトリを監視する
Watcher
採用したのはこれです。
- 起動までのスクリプトが簡単
- 再帰処理ができる(あるディレクトリを監視したらその下まで全て対象)
- 変更されたファイルを引数として任意のスクリプトを稼働させられる
Python2.7が必須要件なようです。
基本的にはずっと起動させて置くだけで自然に検知処理が走ります。ログがちょっと見にくいかな・・・
Gitのソース
https://github.com/splitbrain/Watcher
注意点
監視するフォルダに制限数があり、ディフォでは8192個でした。増やすこともできますが、メモリ諸費など何らかの負荷がかかる可能性があるので要注意です。
インストール手順
1 2 3 4 5 |
sudo yum install centos-release-scl-rh sudo yum install python27 python27-python-tools git clone https://github.com/splitbrain/Watcher.git #後述するinit_watcher実行 init_watcher.sh |
init_watcher.sh(インストール用)
1 2 3 4 5 6 7 8 9 10 |
#!/bin/bash scl enable python27 - << \EOF pip install --upgrade pip pip install --upgrade setuptools easy_install -U setuptools pip install pyinotify EOF #もちろん普通に scl enable python27とやって上記のコマンドを打ってもOKです。 |
start_watcher.sh(起動スクリプト)
1 2 3 |
scl enable python27 - << \EOF ./watcher.py -c ./watcher.ini start EOF |
watcher.ini(設定ファイル)
1 2 3 4 5 6 |
[job1] watch=監視対象ディレクトリ events=modify(イベント) recursive=true(再帰処理をするか) autoadd=true command=対象のシェルスクリプトのパス $filename |
stop_watcher.ini
1 2 3 4 |
#!/bin/bash scl enable python27 - << \EOF ./watcher.py -c ./watcher.ini stop EOF |
起動プロセス
1 2 3 4 |
起動時は ./start_watcher.sh 終了時は ./stop_watcher.sh |
sclに関しては下記リンクを参照のこと
CentOSでRuby 1.9.3やPython 2.7、Python 3.3などを使う簡単な方法
主に古いOSで新しいversionを入れる時に使うようです。
yumなどで一気にインストールしてしまうと他のライブラリとの整合性が崩れてしまうこともあるため(参考例:pythonのアップグレードに関して)、一時的に使うような感じだと思う。
[…] slc 監視検知処理に関して […]
[…] 監視検知処理に関して […]