En god måde at håndtere/behandle filer, der er oprettet på tilfældige tidspunkter, er at brugeincron
i stedet for cron
. (Bemærk:siden incron bruger Linux-kernensinotify
syscalls, virker denne løsning kun med Linux.)
Hvorimod cron
kører et job baseret på datoer og klokkeslæt, incron
kører et job baseret på ændringer i en overvåget mappe. For eksempel kan du konfigurere incron til at køre et job, hver gang en ny fil oprettes eller ændres.
På Ubuntu hedder pakken incron
. Jeg er ikke sikker på RedHat, men jeg tror, dette er den rigtige pakke:http://rpmfind.net//linux/RPM/dag/redhat/el5/i386/incron-0.5.9-1.el5.rf. i386.html
.
Når du har installeret incron-pakken, læs
man 5 incrontab
for information om, hvordan du opsætter incrontab-konfigurationsfilen. Din incron_config
fil kan se sådan ud:
/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 $#
Så for at registrere denne konfiguration med incrond-dæmonen, ville du køre
incrontab /path/to/incron_config
Det er alt, hvad der skal til. Nu når en fil oprettes i /var/ss01, /var/ss02, /var/ss03 eller /var/ss04, kommandoen
/path/to/processing/script.py $#
køres, med $# erstattet af navnet på den nyoprettede fil.
Dette vil undgå behovet for at gemme/sammenligne hashes, og filer vil kun blive behandlet én gang -- umiddelbart efter de er oprettet.
Bare sørg for, at dit behandlingsscript ikke skriver ind på det øverste niveau af de overvågede mapper. Hvis det gør det, vil incrond bemærke den nye fil, der er oprettet, og starte script.py igen, hvilket sender dig ind i en uendelig løkke.
incrond overvåger individuelle mapper og overvåger ikke undermapper rekursivt. Så du kan henvise tshark til at skrive til /var/ss01/tobeprocessed, bruge incron til at overvåge/var/ss01/tobeprocessed, og få din script.py til at skrive til /var/ss01, for eksempel.
PS. Der er også en python-grænseflade til inotify, kaldet pyinotify . I modsætning til incron kan pyinotify rekursivt overvåge undermapper. I dit tilfælde tror jeg dog ikke, at den rekursive overvågningsfunktion er nyttig eller nødvendig.