sql >> Databasteknik >  >> RDS >> Mysql

Hur man hanterar nya filer att bearbeta i cron jobb

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.



  1. Massinlägg med textkvalificerare i SQL Server

  2. Vilka mysql-inställningar påverkar hastigheten för LOAD DATA INFILE?

  3. Kan inte lösa tabellnamn nära

  4. Hur man ställer in MySQL för att använda GMT i Windows och Linux