0

アプリを開発しています。私が使用しているオペレーティング システムは Linux です。可能であれば、ディレクトリに作成されたファイルに対して ruby​​ スクリプトを実行する必要があります。このスクリプトを常に実行しておく必要があります。私が最初に考えたのはinotifyです:

inotify API は、ファイル システム イベントを監視するメカニズムを提供します。inotify を使用して、個々のファイルを監視したり、ディレクトリを監視したりできます。

それはまさに私が必要としているものであり、「rb-inotify」という inotify のラッパーを見つけました。

inotify を使用するよりも、必要なことを行うためのより良い方法があると思いますか? また、rb-inotify の使い方がよくわかりません。

たとえば、次のように rb ファイルを作成します。

notifier = INotify::Notifier.new
notifier.watch("directory/to/check",:create) do |event|
    #do task with event.name file
end

notifier.run

それから私はただruby myRBNotifier.rb、それは永遠にループし続けます. どうすれば止められますか?何か案が?これは良いアプローチですか?

4

3 に答える 3

2

を見ることをお勧めします。この種のタスク用に設計されており、バックグラウンド アプリとデーモン アプリの監視システムを非常に簡単に構築できます。

メイン コード自体に関しては、inotify はクロスプラットフォームではないため、Windows または Mac OS で実行する必要がある可能性がある場合は、別のソリューションが必要になります。ターゲット ディレクトリの変更を定期的にチェックする小さなコードを書くのはそれほど難しいことではありません。何が変更されたかを知る必要がある場合は、ディレクトリ エントリを読み取ってキャッシュし、次にコードを実行するときにそれらを比較します。実行の間に使用sleepして、ループする前に一定時間待機します。

同様のことを行う昔ながらの方法は、cron を使用して定期的にジョブを開始することです。そのジョブは、キャッシュされたバージョンと比較してファイル リストが変更されたかどうかを確認し、何かが異なる場合は必要に応じて動作するスクリプトにすることができます。

于 2012-11-30T05:19:30.347 に答える
0

バックグラウンドでスクリプトを実行するだけです

ruby myRBNotifier.rb &

停止する必要がある場合は、プロセス ID を見つけて kill を使用します。

ps ux
kill [whatever pid your process gets from the OS]

それはあなたの質問に答えていますか?

于 2012-11-29T23:25:07.820 に答える
0

mac/unix マシンで実行している場合は、launchctl マニュアル ページを参照してください。ファイルが変更されるたびに ruby​​ スクリプトを実行および実行するようにプロセスを設定できます。高度な設定が可能です。

于 2013-07-31T15:26:44.633 に答える