Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Jak obsługiwać nowe pliki do przetworzenia w zadaniu cron

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.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. json_encode zwraca wartości kolejnych wierszy - PHP PDO SQL HighCharts

  2. Zapytanie Mysql nie używa indeksu, gdy istnieją zmienne w WHERE

  3. Pobieranie danych z dwóch tabel powiązanych z kluczem obcym w CakePhp

  4. Laravel InvalidArgumentException w Carbon.php wiersz 425:Końcowe dane z bazą danych SQL

  5. MySQL - Jak wybrać dane według długości łańcucha