Cara yang baik untuk menangani/memproses file yang dibuat secara acak adalah dengan menggunakanincron
daripada cron
. (Catatan:karena incron menggunakannotify
kernel Linux syscalls, solusi ini hanya bekerja dengan Linux.)
Sedangkan cron
menjalankan pekerjaan berdasarkan tanggal dan waktu, incron
menjalankan pekerjaan berdasarkan perubahan dalam direktori yang dipantau. Misalnya, Anda dapat mengonfigurasi incron untuk menjalankan tugas setiap kali file baru dibuat atau diubah.
Di Ubuntu, paket tersebut disebut incron
. Saya tidak yakin tentang RedHat, tapi saya yakin ini adalah paket yang tepat:http://rpmfind.net//linux/RPM/dag/redhat/el5/i386/incron-0.5.9-1.el5.rf. i386.html
.
Setelah Anda menginstal paket incron, baca
man 5 incrontab
untuk informasi tentang cara mengatur file konfigurasi incrontab. incron_config
Anda file mungkin terlihat seperti ini:
/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 $#
Kemudian untuk mendaftarkan konfigurasi ini dengan daemon incrond, Anda akan menjalankan
incrontab /path/to/incron_config
Itu saja. Sekarang setiap kali file dibuat di /var/ss01, /var/ss02, /var/ss03 atau /var/ss04, perintahnya
/path/to/processing/script.py $#
dijalankan, dengan $# diganti dengan nama file yang baru dibuat.
Ini akan meniadakan kebutuhan untuk menyimpan/membandingkan hash, dan file hanya akan diproses sekali -- segera setelah dibuat.
Pastikan skrip pemrosesan Anda tidak menulis ke tingkat atas direktori yang dipantau. Jika ya, maka incrond akan melihat file baru yang dibuat, dan meluncurkan script.py lagi, mengirim Anda ke infinite loop.
incrond memonitor direktori individu, dan tidak memantau subdirektori secara rekursif. Jadi, Anda dapat mengarahkan tshark untuk menulis ke /var/ss01/tobeprocessed, menggunakan incron untuk memantau/var/ss01/tobeprocessed, dan meminta script.py Anda menulis ke /var/ss01, misalnya.
PS. Ada juga antarmuka python untuk dinotifikasi, disebut pyinotify . Tidak seperti incron, pyinotify dapat memantau subdirektori secara rekursif. Namun, dalam kasus Anda, menurut saya fitur pemantauan rekursif tidak berguna atau diperlukan.