Dobrym sposobem obsługi/przetwarzania plików, które są tworzone losowo, jest użycie incron
zamiast cron
. (Uwaga:ponieważ incron używa inotify
jądra Linuksa wywołania systemowe, to rozwiązanie działa tylko z Linuksem.)
Natomiast cron
uruchamia zadanie na podstawie dat i godzin, incron
uruchamia zadanie na podstawie zmian w monitorowanym katalogu. Na przykład, możesz skonfigurować incron, aby uruchamiał zadanie za każdym razem, gdy nowy plik jest tworzony lub modyfikowany.
W Ubuntu pakiet nazywa się incron
. Nie jestem pewien co do RedHata, ale uważam, że to właściwy pakiet:http://rpmfind.net//linux/RPM/dag/redhat/el5/i386/incron-0.5.9-1.el5.rf. i386.html
.
Po zainstalowaniu pakietu incron przeczytaj
man 5 incrontab
aby uzyskać informacje na temat konfiguracji pliku konfiguracyjnego incrontab. Twój incron_config
plik może wyglądać mniej więcej tak:
/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 $#
Następnie, aby zarejestrować tę konfigurację za pomocą demona incrond, należy uruchomić
incrontab /path/to/incron_config
To wszystko. Teraz za każdym razem, gdy plik jest tworzony w /var/ss01, /var/ss02, /var/ss03 lub /var/ss04, polecenie
/path/to/processing/script.py $#
jest uruchamiany, a $# jest zastępowane nazwą nowo utworzonego pliku.
Pozwoli to uniknąć konieczności przechowywania/porównywania skrótów, a pliki będą przetwarzane tylko raz — natychmiast po ich utworzeniu.
Upewnij się tylko, że Twój skrypt przetwarzania nie zapisuje na najwyższym poziomie monitorowanych katalogów. Jeśli tak, incrond zauważy nowy plik i ponownie uruchomi script.py, wprowadzając Cię w nieskończoną pętlę.
incrond monitoruje poszczególne katalogi i nie monitoruje rekurencyjnie podkatalogów. Możesz więc skierować tshark do zapisu do /var/ss01/tobeprocessed, użyć incron do monitorowania/var/ss01/tobeprocessed i na przykład poprosić skrypt.py o zapis do /var/ss01.
PS. Istnieje również interfejs Pythona do inotify, zwany pyinotify . W przeciwieństwie do incron, pyinotify może rekurencyjnie monitorować podkatalogi. Jednak w twoim przypadku uważam, że funkcja monitorowania rekurencyjnego nie jest przydatna ani konieczna.