Dobrým způsobem, jak zpracovat/zpracovat soubory, které jsou vytvořeny v náhodných časech, je použítincron
spíše než cron
. (Poznámka:protože incron používá linuxové jádroinotify
syscalls, toto řešení funguje pouze s Linuxem.)
Zatímco cron
spustí úlohu založenou na datech a časech, incron
spustí úlohu založenou na změnách v monitorovaném adresáři. Můžete například nakonfigurovat incron tak, aby spustil úlohu pokaždé, když je vytvořen nebo upraven nový soubor.
Na Ubuntu se balíček nazývá incron
. Nejsem si jistý RedHat, ale věřím, že toto je ten správný balíček:http://rpmfind.net//linux/RPM/dag/redhat/el5/i386/incron-0.5.9-1.el5.rf. i386.html
.
Po instalaci balíčku incron si přečtěte
man 5 incrontab
informace o tom, jak nastavit konfigurační soubor incrontab. Váš incron_config
soubor může vypadat nějak takto:
/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 $#
Poté, abyste tuto konfiguraci zaregistrovali pomocí démona incrond, spustili byste
incrontab /path/to/incron_config
To je všechno. Nyní, kdykoli je vytvořen soubor v /var/ss01, /var/ss02, /var/ss03 nebo /var/ss04, příkaz
/path/to/processing/script.py $#
se spustí, přičemž $# bude nahrazeno názvem nově vytvořeného souboru.
Tím se vyhnete nutnosti ukládat/porovnávat hashe a soubory budou zpracovány pouze jednou – ihned po jejich vytvoření.
Jen se ujistěte, že váš skript pro zpracování nezapisuje do nejvyšší úrovně sledovaných adresářů. Pokud ano, incrond si všimne vytvořeného nového souboru a znovu spustí script.py, čímž vás pošle do nekonečné smyčky.
incrond monitoruje jednotlivé adresáře a nesleduje rekurzivně podadresáře. Můžete tedy nařídit tshark, aby zapisoval do /var/ss01/tobeprocessed, použít incron k monitorování/var/ss01/tobeprocessed a nechat svůj script.py zapisovat například do /var/ss01.
PS. Existuje také rozhraní pythonu pro inotifikaci, nazvané pyinotify . Na rozdíl od incronu může pyinotify rekurzivně sledovat podadresáře. Ve vašem případě si však nemyslím, že funkce rekurzivního sledování je užitečná nebo nezbytná.