41
36

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

incronを使ってみた

Posted at

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ライクで設定できるのは楽。
一方で、結構古いプロダクトのわりに、あまりネットに情報がなかったりするので、調べるのに苦労します。なお、開発は今も継続しているみたいです。

本家

以上

41
36
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
41
36

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?