Mysql
 sql >> Database >  >> RDS >> Mysql

Come gestire i nuovi file da elaborare in cron job

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.