ランダムに作成されたファイルを処理/処理する良い方法は、incron
を使用することです。 cron
ではなく 。 (注:incronはLinuxカーネルのinotify
を使用しているため syscalls、このソリューションはLinuxでのみ機能します。)
一方、cron
日付と時刻に基づいてジョブを実行します。incron
監視対象ディレクトリの変更に基づいてジョブを実行します。たとえば、新しいファイルが作成または変更されるたびにajobを実行するようにincronを構成できます。
Ubuntuでは、パッケージはincron
と呼ばれます 。 RedHatについてはよくわかりませんが、これが正しいパッケージだと思います:http://rpmfind.net//linux/RPM/dag/redhat/el5/i386/incron-0.5.9-1.el5.rf。 i386.html
。
incronパッケージをインストールしたら、
をお読みください。man 5 incrontab
incrontab構成ファイルのセットアップ方法については。 incron_config
ファイルは次のようになります:
/var/ss01/ IN_CLOSE_WRITE /path/to/processing/script.py $#
/var/ss02/ IN_CLOSE_WRITE /path/to/processing/script.py $#
/var/ss03/ IN_CLOSE_WRITE /path/to/processing/script.py $#
/var/ss04/ IN_CLOSE_WRITE /path/to/processing/script.py $#
次に、この構成をincrondデーモンに登録するには、
を実行します。incrontab /path/to/incron_config
これですべてです。これで、ファイルが/ var / ss01、/ var / ss02、/ var / ss03、または/ var / ss04に作成されるたびに、コマンド
/path/to/processing/script.py $#
$#が新しく作成されたファイルの名前に置き換えられて実行されます。
これにより、ハッシュを保存/比較する必要がなくなり、ファイルは作成された直後に1回だけ処理されます。
処理スクリプトが監視対象ディレクトリの最上位に書き込まれないことを確認してください。書き込まれる場合、incrondは作成された新しいファイルに気づき、script.pyを再度起動して、無限ループに陥ります。
incrondは個々のディレクトリを監視し、サブディレクトリを再帰的に監視しません。たとえば、tsharkに/ var / ss01 / tobeprocessedに書き込むように指示し、incronを使用して/ var / ss01 / tobeprocessedを監視し、script.pyに/ var/ss01に書き込むように指示できます。
PS。 pyinotify と呼ばれるinotify用のPythonインターフェースもあります。 。 incronとは異なり、pyinotifyはサブディレクトリを再帰的に監視できます。ただし、あなたの場合、再帰的監視機能は有用または必要ではないと思います。