Saya memiliki skenario di mana saya mengunggah file .csv ke folder tertentu, / tmp / data_upload, setiap hari, dan file-file lama digantikan oleh yang baru.
Saya perlu menjalankan skrip Python setelah data diunggah. Untuk ini, saya punya ide untuk membuat pekerjaan cron dan memonitor perubahan dalam file. Saya mencoba menggunakan inotify, tetapi saya tidak banyak ke domain Unix. Bagaimana saya bisa melakukan itu?
Saya perlu menjalankan script test.py setelah ada perubahan tanggal pada file di folder unggah, misalnya, / tmp / data_upload.
inotify
perpustakaan yang tersedia. Lihat salah satu jawaban saya di sini untuk contoh: askubuntu.com/a/939392/295286Jawaban:
Anda mungkin perlu incrond (inotify cron daemon) yang akan memonitor perubahan pada file dan kemudian menjalankan skrip.
Incrond dapat memonitor menambahkan file baru, memodifikasi, menghapus, dan banyak lagi. Ini adalah artikel yang menunjukkan peristiwa apa yang dapat dipantau dengan beberapa contoh.
Contoh untuk kasus Anda, Anda dapat membuat file
/etc/incron.d/data_upload
dengan kontensumber
incrontab -e
sebagai root lalu sertakan baris ini/tmp/data_upload IN_CREATE,IN_MODIFY test.py
? sehingga untuk memeriksa setelah saya mengunggah file baru itu harus menjalankan file test.py? di mana saya harus meletakkan file test.py? haruskah saya memberikan jalur absolut untuk ini?Anda dapat menggunakan entr untuk menjalankan skrip secara otomatis setiap kali file berubah dengan dijalankan
ls /tmp/data_upload | entr -p script.py
sekali saat startup.Situs web proyek: http://eradman.com/entrproject/
Halaman manual online: https://www.systutorials.com/docs/linux/man/1-entr/
sumber
The
watchexec
( https://crates.io/crates/watchexec ) suara utilitas baris perintah seperti apa yang Anda butuhkan, meskipun saya percaya untuk menginstalnya Anda akan perlu untuk memiliki Rust membangun alat yang diinstal pada komputer Anda, sehingga mungkin pelanggar transaksisumber
Pendekatan umum saya adalah mengutak-atik
find
utilitas Unix klasik . Misalnya, perintahnyaakan menemukan
.csv
file apa pun/tmp/upload_data
yang telah dimodifikasi kurang dari satu hari yang lalu, dan jalankan file Andatest.py
jika ada. Tentu saja, jikatest.py
file Anda ada di direktori lain, Anda ingin memperbarui jalur Anda ke sana.Jika Anda menjalankan
cron
pekerjaan Anda lebih sering dari sekali sehari, Anda dapat menggunakanmmin
opsifind
untuk menentukan waktu maksimal sejak modifikasi dalam hitungan menit. Sebagai contoh,akan mencari
.csv
file yang dimodifikasi kurang dari 60 menit yang lalu - berguna jika cron menjalankan pekerjaan setiap jam.Ada dua peringatan yang adil: Pertama, ini tidak akan menangkap
.csv
file yang Anda hapus sepenuhnya. Anda mungkin ingin memeriksa ini secara terpisah. Kedua, saya tidak punya waktu untuk menguji semua ini. Harapkan kesalahan ketik dalam kode saya yang harus Anda debug sendiri.sumber
-cmd
sintaks? IIRCfind
mengambil-exec cmd ;
...