Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Umgang mit neuen Dateien zur Verarbeitung im Cron-Job

Eine gute Möglichkeit, Dateien zu handhaben/verarbeiten, die zu zufälligen Zeiten erstellt werden, ist die Verwendung von incron statt cron . (Anmerkung:da Incron den inotify des Linux-Kernels verwendet Systemaufrufe, diese Lösung funktioniert nur mit Linux.)

Während cron führt einen Job basierend auf Datum und Uhrzeit aus, incron führt einen Job basierend auf Änderungen in einem überwachten Verzeichnis aus. Beispielsweise können Sie incron so konfigurieren, dass es jedes Mal einen Job ausführt, wenn eine neue Datei erstellt oder geändert wird.

Unter Ubuntu heißt das Paket incron . Bei RedHat bin ich mir nicht sicher, aber ich glaube, das ist das richtige Paket:http://rpmfind.net//linux/RPM/dag/redhat/el5/i386/incron-0.5.9-1.el5.rf. i386.html .

Lesen Sie nach der Installation des Incron-Pakets

man 5 incrontab 

für Informationen zum Einrichten der incrontab-Konfigurationsdatei. Ihre incron_config Datei könnte etwa so aussehen:

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

Um diese Konfiguration dann beim incrond-Daemon zu registrieren, würden Sie

ausführen
incrontab /path/to/incron_config

Das ist alles dazu. Jetzt wird immer, wenn eine Datei in /var/ss01, /var/ss02, /var/ss03 oder /var/ss04 erstellt wird, der Befehl

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

ausgeführt, wobei $# durch den Namen der neu erstellten Datei ersetzt wird.

Dadurch entfällt die Notwendigkeit, Hashes zu speichern/zu vergleichen, und Dateien werden nur einmal verarbeitet – unmittelbar nachdem sie erstellt wurden.

Stellen Sie nur sicher, dass Ihr Verarbeitungsskript nicht in die oberste Ebene der überwachten Verzeichnisse schreibt. Wenn dies der Fall ist, wird incrond die neu erstellte Datei bemerken und script.py erneut starten, was Sie in eine Endlosschleife schickt.

incrond überwacht einzelne Verzeichnisse und nicht rekursiv Unterverzeichnisse. Sie könnten also tshark anweisen, nach /var/ss01/tobeprocessed zu schreiben, incron verwenden, um /var/ss01/tobeprocessed zu überwachen, und Ihre script.py zum Beispiel nach /var/ss01 schreiben lassen.

PS. Es gibt auch eine Python-Schnittstelle für Inotify namens pyinotify . Im Gegensatz zu Incron kann Pyinotify Unterverzeichnisse rekursiv überwachen. In Ihrem Fall halte ich die rekursive Überwachungsfunktion jedoch nicht für nützlich oder notwendig.