Un buon modo per gestire/elaborare i file che vengono creati in momenti casuali è usare incron
anziché cron
. (Nota:poiché incron utilizza inotify
del kernel Linux syscalls, questa soluzione funziona solo con Linux.)
Mentre cron
esegue un lavoro in base a date e orari, incron
esegue un lavoro in base alle modifiche in una directory monitorata. Ad esempio, puoi configurare incron per eseguire un lavoro ogni volta che viene creato o modificato un nuovo file.
Su Ubuntu, il pacchetto si chiama incron
. Non sono sicuro di RedHat, ma credo che questo sia il pacchetto giusto:http://rpmfind.net//linux/RPM/dag/redhat/el5/i386/incron-0.5.9-1.el5.rf. i386.html
.
Una volta installato il pacchetto incron, leggi
man 5 incrontab
per informazioni su come impostare il file di configurazione incrontab. Il tuo incron_config
il file potrebbe assomigliare a questo:
/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 $#
Quindi per registrare questa configurazione con il demone incrond, devi eseguire
incrontab /path/to/incron_config
Questo è tutto quello che c'è da fare. Ora ogni volta che viene creato un file in /var/ss01, /var/ss02, /var/ss03 o /var/ss04, il comando
/path/to/processing/script.py $#
viene eseguito, con $# sostituito dal nome del file appena creato.
Ciò eliminerà la necessità di archiviare/confrontare gli hash e i file verranno elaborati solo una volta, immediatamente dopo la creazione.
Assicurati solo che il tuo script di elaborazione non scriva nel livello più alto delle directory monitorate. Se lo fa, incrond noterà il nuovo file creato e avvierà di nuovo script.py, mandandoti in un ciclo infinito.
incrond controlla le singole directory e non esegue il monitoraggio ricorsivo delle sottodirectory. Quindi potresti indirizzare tshark a scrivere in /var/ss01/tobeprocessed, usare incron per monitorare/var/ss01/tobeprocessed e fare in modo che il tuo script.py scriva su /var/ss01, per esempio.
PS. C'è anche un'interfaccia Python per inotificare, chiamata pyinotify . A differenza di incron, pyinotify può monitorare ricorsivamente le sottodirectory. Tuttavia, nel tuo caso, non credo che la funzione di monitoraggio ricorsivo sia utile o necessaria.