.csvファイルを特定のフォルダー/ tmp/data_uploadに毎日アップロードしていて、古いファイルが新しいファイルに置き換えられるシナリオがあります。
データがアップロードされたら、Python=スクリプトを実行する必要があります。このために、cronジョブを作成し、ファイルの変更を監視するアイデアがあります。inotifyを使用してみましたが、 Unixドメインにはあまり関係していません。
/ tmp/data_uploadなどのアップロードフォルダー内のファイルの日付が変更されたら、スクリプトtest.pyを実行する必要があります。
ファイルの変更を監視してスクリプトを実行するincrond(inotify cronデーモン)が必要になる場合があります。
Incrondは、新しいファイルの追加、変更、削除などを監視できます。 これは記事です は、いくつかの例を使用してincrondが監視できるイベントを示します。
あなたのケースの例として、ファイル/etc/incron.d/data_upload
と内容
/tmp/data_upload IN_CREATE,IN_MODIFY /path/to/test.py
entr を使用すると、起動時にls /tmp/data_upload | entr -p script.py
を1回実行することにより、ファイルが変更されるたびにスクリプトを自動的に実行できます。
プロジェクトのウェブサイト: http://eradman.com/entrproject/
オンラインmanページ: https://www.systutorials.com/docs/linux/man/1-entr/
私の一般的なアプローチは、古典的な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
ファイルをキャッチできないことです。これらを個別に確認することもできます。次に、これをテストする時間がありませんでした。あなたが自分でデバッグしなければならないという私のコードのタイプミスを期待してください。
watchexec
( https://crates.io/crates/watchexec )コマンドラインユーティリティは、必要なものとまったく同じように聞こえますが、インストールには、 Rustマシンにインストールされているビルドツール。