web-dev-qa-db-ja.com

ファイルが変更されたときにコマンドを実行する

.csvファイルを特定のフォルダー/ tmp/data_uploadに毎日アップロードしていて、古いファイルが新しいファイルに置き換えられるシナリオがあります。

データがアップロードされたら、Python=スクリプトを実行する必要があります。このために、cronジョブを作成し、ファイルの変更を監視するアイデアがあります。inotifyを使用してみましたが、 Unixドメインにはあまり関係していません。

/ tmp/data_uploadなどのアップロードフォルダー内のファイルの日付が変更されたら、スクリプトtest.pyを実行する必要があります。

9
Alex

ファイルの変更を監視してスクリプトを実行するincrond(inotify cronデーモン)が必要になる場合があります。

Incrondは、新しいファイルの追加、変更、削除などを監視できます。 これは記事です は、いくつかの例を使用してincrondが監視できるイベントを示します。

あなたのケースの例として、ファイル/etc/incron.d/data_uploadと内容

/tmp/data_upload IN_CREATE,IN_MODIFY /path/to/test.py 
10
victoroloan

entr を使用すると、起動時にls /tmp/data_upload | entr -p script.pyを1回実行することにより、ファイルが変更されるたびにスクリプトを自動的に実行できます。

プロジェクトのウェブサイト: http://eradman.com/entrproject/

オンラインmanページ: https://www.systutorials.com/docs/linux/man/1-entr/

1
jln-ho

私の一般的なアプローチは、古典的なUnix findユーティリティをいじることです。たとえば、次のコマンド

find /tmp/upload_data/*.csv -mtime -1 -exec /home/myname/test.py

1日以内に変更された.csv内の/tmp/upload_dataファイルが見つかり、見つかった場合はtest.pyを実行します。もちろん、test.pyファイルが他のディレクトリにある場合は、それに応じてパスを更新する必要があります。

cronジョブを1日に複数回実行する場合は、mminオプションをfindに使用して、変更後の最大時間を分単位で指定できます。例えば、

find /tmp/upload_data/*.csv -mmin -60 -exec /home/myname/test.py

60分以内に変更された.csvファイルを検索します。cronが1時間ごとにジョブを実行する場合に役立ちます。

2つの公平な警告が表示されます。1つ目は、完全に削除した.csvファイルをキャッチできないことです。これらを個別に確認することもできます。次に、これをテストする時間がありませんでした。あなたが自分でデバッグしなければならないという私のコードのタイプミスを期待してください。

0

watchexechttps://crates.io/crates/watchexec )コマンドラインユーティリティは、必要なものとまったく同じように聞こえますが、インストールには、 Rustマシンにインストールされているビルドツール。

0
Ben Sandeen