Ett bra sätt att hantera/bearbeta filer som skapas vid slumpmässiga tidpunkter är att användaincron
istället för cron
. (Obs:eftersom incron använder Linux-kärnansinotify
syscalls, den här lösningen fungerar bara med Linux.)
Medan cron
kör ett jobb baserat på datum och tider, incron
kör ett jobb baserat på ändringar i en övervakad katalog. Du kan till exempel konfigurera incron att köra ett jobb varje gång en ny fil skapas eller ändras.
På Ubuntu heter paketet incron
. Jag är inte säker på RedHat, men jag tror att detta är rätt paket:http://rpmfind.net//linux/RPM/dag/redhat/el5/i386/incron-0.5.9-1.el5.rf. i386.html
.
När du har installerat incron-paketet, läs
man 5 incrontab
för information om hur du ställer in incrontab-konfigurationsfilen. Din incron_config
fil kan se ut ungefär så här:
/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 $#
För att sedan registrera den här konfigurationen med incrond-demonen, skulle du köra
incrontab /path/to/incron_config
Det är allt som finns. Nu när en fil skapas i /var/ss01, /var/ss02, /var/ss03 eller /var/ss04, kommandot
/path/to/processing/script.py $#
körs, med $# ersatt av namnet på den nyskapade filen.
Detta kommer att undanröja behovet av att lagra/jämföra hash, och filer kommer bara att bearbetas en gång -- direkt efter att de har skapats.
Se bara till att ditt bearbetningsskript inte skriver in i den översta nivån av de övervakade katalogerna. Om det gör det kommer incrond att märka den nya filen som skapats och starta script.py igen, vilket skickar dig till en oändlig loop.
incrond övervakar enskilda kataloger och övervakar inte underkataloger rekursivt. Så du kan dirigera tshark att skriva till /var/ss01/tobeprocessed, använda incron för att övervaka/var/ss01/tobeprocessed och låta din script.py skriva till till exempel /var/ss01.
PS. Det finns också ett python-gränssnitt för inotify, kallat pyinotify . Till skillnad från incron kan pyinotify rekursivt övervaka underkataloger. Men i ditt fall tror jag inte att den rekursiva övervakningsfunktionen är användbar eller nödvändig.