Добър начин за обработка/обработка на файлове, които се създават в произволно време, е да използвате incron
вместо cron
. (Забележка:тъй като incron използва inotify
на ядрото на Linux syscalls, това решение работи само с Linux.)
Докато cron
изпълнява задача въз основа на дати и часове, incron
изпълнява задача въз основа на промени в наблюдавана директория. Например, можете да конфигурирате incron да изпълнява задание всеки път, когато се създава или променя нов файл.
В Ubuntu пакетът се нарича incron
. Не съм сигурен за RedHat, но вярвам, че това е правилният пакет:http://rpmfind.net//linux/RPM/dag/redhat/el5/i386/incron-0.5.9-1.el5.rf. i386.html
.
След като инсталирате пакета incron, прочетете
man 5 incrontab
за информация как да настроите конфигурационния файл на incrontab. Вашият incron_config
файл може да изглежда така:
/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 $#
След това, за да регистрирате тази конфигурация с демона incrond, трябва да стартирате
incrontab /path/to/incron_config
Това е всичко. Сега, когато се създаде файл в /var/ss01, /var/ss02, /var/ss03 или /var/ss04, командата
/path/to/processing/script.py $#
се стартира, като $# се заменя с името на новосъздадения файл.
Това ще премахне необходимостта от съхраняване/сравняване на хешове и файловете ще се обработват само веднъж - веднага след като бъдат създадени.
Просто се уверете, че вашият скрипт за обработка не записва в най-горното ниво на наблюдаваните директории. Ако го направи, тогава incrond ще забележи създадения нов файл и ще стартира отново script.py, изпращайки ви в безкраен цикъл.
incrond следи отделни директории и не следи рекурсивно поддиректории. Така че можете да насочите tshark да пише в /var/ss01/tobeprocessed, да използвате incron за наблюдение/var/ss01/tobeprocessed и да накарате вашия script.py да запише в /var/ss01, например.
PS Има и интерфейс на python за inotify, наречен pyinotify . За разлика от incron, pyinotify може рекурсивно да наблюдава поддиректории. Във вашия случай обаче не мисля, че функцията за рекурсивно наблюдение е полезна или необходима.