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

Hvordan man håndterer nye filer til behandling i cron job

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.



  1. SQL-forespørgsel returnerer data fra flere tabeller

  2. Databaseskema for bøger, forfattere, udgivere og brugere med bogreoler

  3. SYSDATE() Eksempler – MySQL

  4. Hvordan finder man huller i sekventiel nummerering i mysql?