5


0

Linux上のディレクトリを監視するプログラム

バディが製品の新しいビルドを追加するディレクトリがあります。

リストは次のようになります

$ ls path-to-dir/
01
02
03
04
$

リストされている番号はファイルではなく、ビルドを含むディレクトリの名前です。

新しいビルドがあるかどうかを毎回手動で確認する必要があります。 *「path-to-dir /」が更新されるたびにプログラムが一部の人(私を含む)にメールを送信できるように、これを自動化する方法を探しています。

  • 既存のユーティリティまたはPerlライブラリがありますか この? + inotify.hは同様のことを行いますが、私のカーネル(2.6.9)ではサポートされていません。

Perlには簡単な方法があると思います。

  • これはうまくいくと思いますか?

    _ Perlで、たとえば5分ごとに `ls path-to-dir /`を実行し、結果を配列に保存するループを実行し続けます。 新しい結果が古い結果と異なる場合は、http://www.perlmonks.org/?node_id = 19430 [Mail]またはhttp://www.perlfect.com/articles/を使用して電子メールを送信しますsendmail.shtml [メール]。 _

5 Answer


5


perlを使用する場合は、優れたhttp://search.cpan.org/perldoc?File::ChangeNotify [`File

ChangeNotify`]モジュールが非常に役立ちます。 可能であれば「inotify」を使用できますが、異なるプラットフォームによって提供される他のあらゆる種類のファイル監視メカニズムも使用できます。 また、フォールバックとして、すべてのプラットフォームで動作する独自の監視実装がありますが、特殊な実装よりも効率が低くなります。


3


異なる `ls`出力をチェックすると、ディレクトリで何かが削除または名前変更された場合でもメッセージが送信されます。 代わりに、最後に送信されたメッセージよりも新しいmtimeを持つファイルを探すことができます。

bashの例を次に示します。5分ごとに実行できます。

now=`date +%Y%m%d%H%M.%S`

if [ ! -f "/path/to/cache/file" ] || [ -n "`find /path/to/build/dir -type f -newer /path/to/cache/file`" ]
then
    touch /path/to/cache/file -t "$now"
    sendmail -t <<< "
To: [email protected]
To: [email protected]
Subject: New files found

Dear friend,
I have found a couple of new files.
"
fi


1


単純なシェルスクリプトにできないでしょうか。

while :;do
        n = 'ls -al path-to-dir | wc -l'
        if n -gt old_n
    # your Mail code here; set old_n=n also
        fi
   sleep 5
done


0


はい、説明されているPerlのループがこのトリックを行います。

ディレクトリが最後に変更された日時を追跡できます。変更されていない場合、新しいビルドはありません。 変更されている場合は、古いビルドが削除されたか、新しいビルドが追加された可能性があります。 おそらく、古いビルドが削除されたときにアラートを送信したくないでしょう。新しいビルドが追加されたときにメールを送信することが重要です。

ただし、https://stackoverflow.com/users/282912/msw [msw]には正しい考えがあると思います。ビルドは、新しいディレクトリへのコピーを完了すると通知する必要があります。 これは、メイクファイルまたは使用する他のビルド制御システム内の名前の固定されたリストではなく、人々の正しいリストに通知するように変更できるスクリプトでなければなりません。


0


dnotifyを使用できます。これはinotifyの前身であり、カーネルで利用できるはずです。 新しいカーネルでも引き続きサポートされています。