bashでディレクトリ差分監視

お疲れ様です。富沢です。

めっきり寒くなってきましたね。今日はマネージャの前で体調優れないアピールしてきたので明日は休めるかもしれません。

 

やること

ディレクトリを監視して新規ファイルが生成されたら報告する

まずは答えのソースコードから。コンサルタントは結論ファースト。

#!/usr/local/bin/bash
#↑bashで動かします

diffArr=()
#過去ログファイル
old="/[ログ格納ディレクトリ]/old_data_directory.txt"
#最新ログファイル
new="/[ログ格納ディレクトリ]/current_data_directory.txt"

ls /[監視先ディレクトリ]/target/ > $new

#diff抽出
for fs in `\diff /[ログ格納ディレクトリ]/old_data_directory.txt /[ログ格納ディレクトリ]/current_data_directory.txt`; do
 diffArr+=("$fs")
done

#diffある場合
if [ ${#diffArr[@]} -gt 0 ]; then
 #※1
 #今回は試しにメール送信
 echo "new file was created in hogehoge" | Mail -s "This is title" hoge@abc.com
fi

cp ${new} ${old}

これをcronとかで定期的に回せばOKかと。もっと簡素なやり方はあると思うんですけど、大してbash勉強してないので今はこれで運用してます。

やってることは簡単で、監視対象ディレクトリのファイル一覧を出力

それを過去ログと見比べて差分が生じてたらなにか処理を出す、という感じ。

実際に僕が運用しているサーバでは※1にもうちょっと処理を加えて、差分ファイルの名前取得などをしてます。んでそれに大してjavaを実行してます。

今回はメール送信という簡単な処理にしましたが、適時ご自身のやりたい処理を当てはめてください。

上記の場合、送信されるメールは下記のようになります。

タイトル:This is title

本文:new file was created in hogehoge

まぁこれはどうでもいいですね。

ちなみに、bashで動かしていますが、さくらレンタルサーバはデフォルトbashじゃなくてcshだったと思います。

その場合はchshコマンドなど使ってください。

 

 

明日休みたい…

 

以上、よろしくお願いします。

Share Button

「bashでディレクトリ差分監視」への1件のフィードバック

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です