今からお前んちこいよ

品川にて細々とお勉強。

ディレクトリ内のファイル追加・削除・更新を監視する!

概要

つらいし枯れた技術だろうな。

何でいまさら枯れた技術?って感じだろうが、
枯れた技術をも生かしてゆきたい、そんな初夏2016
っというわけもなく、
もろもろあって本番しか動いて無いし、故に何もインストールできない。
のでタイトルを実現するためにやったことと、他の場所でやってる方法。

です。

方法

inotify

パッケージインストールしていい状況なら絶対これ。

$ yum install inotify-tools
$ inotifywait -d -o /tmp/inotify_message.log -m [folder/file path]

フォルダ or ファイル 更新とかもろもろログに書いてくれる。
-dでデーモン。
-oでイベントログ出力先指定。(-sでsyslog)

主要言語でデーモンプロセス起動!!

Rubyなら fssmで。
参考)
www.virment.com

phpなら fam_monitor_directory()で。
参考)
stackoverflow.com

Pythonなら watchdogで。
参考)
qiita.com

っと、まー各言語でいろいろステキな感じで関数がそろってた。

 
が、しかし、 phpだとcomposerとかでモジュールインストールしなきゃだし、
rubyでもgemとかでモj...。
pythonでもpipとかd...。そもそも3系入ってない...。
perlは書いたことないし。
...シェル(◞‸◟)

tail!!! ←結局これ

今回のイベントトリガーがhttpアクセスだったから、
アクセスログをtailさせておkだった。
(データ受け取ってファイル出力して 200 OK 返す人がいたということ)

log_checker.sh

#!/bin/sh

function str_check() {
  trigger_str=$1
  while read i
  do
    echo $i | grep -q ${trigger_str}
    if [ $? = "0" ];then
      echo "mitsuketayo!!!!!!"
    fi
  done
}

tail -n 0 --follow=name --retry $1 | str_check $2
$ nohup sh log_checker.sh [/path/to/log] [trigger_str] &

的な感じで実行(◞‸◟)
ちなみに --retry だとログローテートされても新ログでtailし続けてくれる。

終わりに:イベント通知機能あるから、普通。

github だって slack だってイベント通知してくれるものです。
AWSだっていろいろイベント通知機能あります。
上に挙げたものよりも何よりもまず先に、
イベント通知してくれる機能を調べた方がいい。絶対。