2013-06-13 3 views
5

私の目標は、特定のディレクトリまたはその特定のディレクトリのサブディレクトリに新しいファイルが追加されるたびに自動的にbashスクリプトを実行することです。ディレクトリの内容が変更されたときにbashスクリプトを自動的に呼び出す方法

詳細シナリオ:

が、私はその逆の学生に教師やからファイルの提出のための自動化されたプロセスを作成しています。送信者はファイルをアップロードし、の中に保存されます。ディレクトリは、LAMPサーバーの形式で、例: "name_course-name_filename.pdf"私はいくつかの方法が必要なので、Uploadsフォルダ内に保存されているファイルがあれば、スクリプトが呼び出されてそのファイルを受信リストに送信するのと同じ時間がかかるようにします。 データベースから、その特定のコースと受講生の受講者のリストを見つけることができます。

私の唯一の懸案事項は、スクリプトを自動的に呼び出す方法と、ディレクトリの内容が変更されたときに個別のファイルで動作させることです。 Cronはインターバルでは行いますが、リアルタイムでの作業は行いません。

+3

あなたはhttp://stackoverflow.com/questions/4062806/inotify-how-to-use-it-linux([inotifyを]見たことがあります)? –

+0

ya私はそれを見ましたが、私は決してこれを使用しておらず、abashスクリプトを呼び出すためにinotifyの使用を正しく記述している記事は見つかりませんでした – pali

+0

[inotifywait](http://linux.die.net/man/) 1/inotifywait)などです。 –

答えて

5

Linuxは、その目的のために、inotifyと呼ばれる素晴らしい仕組みを提供します。 inotifyは、ほとんどがC APIとして利用可能です。しかし、シェルユーティリティも開発されています。このためにinotifywaitinotifytools(debianのpkg名)から使用する必要があります。ここでは基本的な例が来る:

#!/bin/bash 

directory="/tmp" # or whatever you are interested in 

inotifywait -m -e create "$directory" | 
while read folder eventlist eventfile 
do 
    echo "the following events happened in folder $folder:" 
    echo "$eventlist $eventfile" 
done 

更新:問題が複雑になり

場合、たとえば、あなたが、あなたはそれのようにcronだincronを見ている必要があり、再帰的な、ダイナミックなディレクトリ構造を監視する必要があります特定のイベントでスクリプトを実行するデーモン。しかし、イベントはタイマーイベントではなくファイルシステムイベントです。

+0

あなたの返信ありがとうございます... – pali

+0

私はあなたの解決策を試しました。私は "時計を設定しています。 時計が確立しました"というメッセージが表示され、プログラムは終了していません。私はイントファイアするのがとても新しいです。だから明確にしてください。 – pali

+1

あなたが見るフォルダにいくつかの変更を加えてください。 :)プログラムは現在のバージョンで決して終了しません。それは永遠に変化を待つでしょう。私はしばらくAFKになることに注意してください。後でここに戻ります。 – hek2mgl

2

「inotifywait」に別のオプションがあります:--monitorと同じ --daemon

-d、--outfileで指定する必要がありますファイル にバックグラウンドログイベントで実行除きます。 - syslogを暗示します。完全を期すため

-m --monitor の代わりに単一のイベントを受信した後に出る、無期限に実行します。 デフォルトの動作では、最初のイベントが発生した後に終了します。

'while'ステートメントのdo-doneブロック内で、興味深い詳細についてそれぞれのイベントレポートを解析し、気になる各イベントに基づいてアクションを実行するために 'case-esac'を使用することができます。

あなたの操作に頼りがちなものについては、ハードコードされた '$ directory'を何らかの設定ファイルに置き換えることも考えられます。そのようなファイルには、パスとファイル名、そのパスとファイルの興味深いイベント、およびそれらのイベントが発生したときに実行されるスクリプトが含まれます。 スクリプトは、イベントのリストをパラメータとして取り込み、「case-esac」を再度実行します。

ただ、一人の男のramblins、 ~~~ 8D; -Dan

関連する問題