Help us understand the problem. What is going on with this article?

incronを使ってみた

More than 5 years have passed since last update.

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

以上

k-suzuki
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした