1. k-suzuki

    Posted

    k-suzuki
Changes in title
+incronを使ってみた
Changes in tags
Changes in body
Source | HTML | Preview
@@ -0,0 +1,135 @@
+# incronとは?
+- ファイルの作成、変更、削除、移動といったイベントを検知して、登録したジョブを実行させるものです。
+- Linuxのinotifyという仕組みを使っている。(Linuxカーネル2.6.13以降で利用可能)
+
+# incronを選んだ理由
+とあるファイルを修正した後に、必ずあるコマンドを実行して、ファイルを再作成する必要がある、それを毎回手動で行うのは面倒なので、色々調べた結果、incronにたどり着いた。
+
+# インストール手順
+
+```
+$ sudo yum install incron
+```
+
+# 起動
+
+```
+$ sudo /etc/init.d/incrond start
+```
+
+# 停止
+
+```
+$ sudo /etc/init.d/incrond stop
+```
+
+# ジョブの登録
+
+```
+$ incrontab -e
+[監視対象のファイル] [イベント] [実行するコマンド]
+```
+
+
+
+```
+/home/www/test.ini.dev IN_MODIFY,IN_NO_LOOP /usr/bin/php /home/www/bin/test.php
+```
+
+## 解説
+/home/www/test.ini.devを、
+
+IN_MODIFY(編集)したら、
+
+/usr/bin/php /home/www/bin/test.phpを実行
+
+という意味
+
+
+- イベントはカンマ区切りで複数指定が可能
+- PATHなどの環境変数は一切反映されていないっぽい(なので、phpとかも/usr/bin/phpと書かないといけない)
+- IN_NO_LOOPは、よくわかっていないが、実行するコマンドが完了するまで、イベント監視を無効にするというイベント。(これを指定しないとなぜか、2回目以降にイベントが実行されない)
+
+マニュアルには、
+
+>「there is a symbol which doesn’t appear in the inotify symbol set. It it IN_NO_LOOP. This symbol disables monitoring events until the current one is completely handled (until its child process exits).」
+
+## 検知可能なイベント
+- IN_ACCESS
+ - File was accessed (read)
+- IN_ATTRIB
+ - Metadata changed (permissions, timestamps, extended attributes, etc.)
+- IN_CLOSE_WRITE
+ - File opened for writing was closed
+- IN_CLOSE_NOWRITE
+ - File not opened for writing was closed
+- IN_CREATE
+ - File/directory created in watched directory
+- IN_DELETE
+ - File/directory deleted from watched directory
+- IN_DELETE_SELF
+ - Watched file/directory was itself deleted
+- IN_MODIFY
+ - File was modified
+- IN_MOVE_SELF
+ - Watched file/directory was itself moved
+- IN_MOVED_FROM
+ - File moved out of watched directory
+- IN_MOVED_TO
+ - File moved into watched directory
+- IN_OPEN
+ - File was opened
+
+
+# 登録したジョブの反映
+
+```
+$ incrontab -d
+```
+
+これを実行しないと、登録したジョブが反映されないので、ご注意。
+
+# 登録したジョブの確認
+
+```
+$ incrontab -l
+
+```
+
+ちなみに、登録したジョブは
+/vat/spool/incron/以下にファイルとして保存されています。
+
+```
+$ ls -l /var/spool/incron/
+合計 4
+-rw------- 1 root www 131 4月 27 11:35 2015 www
+```
+
+ファイル名はジョブを登録したユーザ名になっているみたいです。
+
+
+# ログの確認
+
+```
+$ sudo tail -f /var/log/cron
+```
+
+cronのログと共有みたいです
+こんな感じで表示されます。
+
+```
+Apr 27 11:35:09 ip-172-20-112-61 incrond[1248]: table for user www created, loading
+Apr 27 11:35:09 ip-172-20-112-61 incrond[1248]: table for user www changed, reloading
+Apr 27 11:36:11 ip-172-20-112-61 incrond[1248]: (www) CMD (/usr/bin/php /home/www/bin/test.php)
+Apr 27 11:36:21 ip-172-20-112-61 incrond[1248]: (www) CMD (/usr/bin/php /home/www/bin/test.php)
+```
+
+# まとめ
+cronライクで設定できるのは楽。
+一方で、結構古いプロダクトのわりに、あまりネットに情報がなかったりするので、調べるのに苦労します。なお、開発は今も継続しているみたいです。
+
+# 本家
+http://inotify.aiken.cz/?section=common&page=home&lang=en
+
+
+以上