sql >> Database >  >> RDS >> Mysql

Hoe om te gaan met nieuwe bestanden om te verwerken in cron job

Een goede manier om bestanden te verwerken/verwerken die op willekeurige tijdstippen zijn gemaakt, is door incron te gebruiken in plaats van cron . (Opmerking:aangezien incron de inotify van de Linux-kernel gebruikt syscalls, deze oplossing werkt alleen met Linux.)

Terwijl cron voert een taak uit op basis van datums en tijden, incron voert een taak uit op basis van wijzigingen in een bewaakte map. U kunt bijvoorbeeld incron configureren om een ​​taak uit te voeren telkens wanneer een nieuw bestand wordt gemaakt of gewijzigd.

Op Ubuntu heet het pakket incron . Ik ben niet zeker van RedHat, maar ik geloof dat dit het juiste pakket is:http://rpmfind.net//linux/RPM/dag/redhat/el5/i386/incron-0.5.9-1.el5.rf. i386.html .

Nadat u het incron-pakket hebt geïnstalleerd, leest u

man 5 incrontab 

voor informatie over het instellen van het incrontab-configuratiebestand. Uw incron_config bestand kan er ongeveer zo uitzien:

/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 $#

Om deze configuratie vervolgens te registreren met de incrond-daemon, zou je

. uitvoeren
incrontab /path/to/incron_config

Dat is alles. Wanneer nu een bestand wordt aangemaakt in /var/ss01, /var/ss02, /var/ss03 of /var/ss04, wordt het commando

/path/to/processing/script.py $#

wordt uitgevoerd, waarbij $# wordt vervangen door de naam van het nieuw gemaakte bestand.

Hierdoor is het niet meer nodig om hashes op te slaan/te vergelijken, en bestanden worden slechts één keer verwerkt - onmiddellijk nadat ze zijn gemaakt.

Zorg ervoor dat uw verwerkingsscript niet naar het hoogste niveau van de gecontroleerde mappen schrijft. Als dit het geval is, zal incrond het nieuwe bestand dat is gemaakt opmerken en script.py opnieuw starten, waardoor u in een oneindige lus terechtkomt.

incrond controleert individuele mappen en controleert submappen niet recursief. U kunt tshark dus opdracht geven om naar /var/ss01/tobeprocessed te schrijven, incron gebruiken om/var/ss01/tobeprocessed te controleren en uw script.py bijvoorbeeld naar /var/ss01 laten schrijven.

ps. Er is ook een python-interface om te inotificeren, genaamd pyinotify . In tegenstelling tot incron kan pyinotify submappen recursief controleren. In jouw geval denk ik echter niet dat de recursieve controlefunctie nuttig of noodzakelijk is.



  1. Hoe kan ik deze query optimaliseren, duurt meer dan een minuut om uit te voeren?

  2. Ruimtelijke gegevens opslaan in CakePHP

  3. mysql telt geen dubbele rijen

  4. Android Room - Lijst met objecten in een object verwerken en resultaten opvragen