Хороший способ обработки / обработки файлов, созданных в случайное время, - это использование incron
вместо cron
.(Примечание: поскольку incron использует системные вызовы inotify ядра Linux, это решение работает только с 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, например.Существует также интерфейс Python для inotify, называемый pyinotify .В отличие от incron, pyinotify может рекурсивно отслеживать подкаталоги.Однако в вашем случае я не думаю, что функция рекурсивного мониторинга полезна или необходима.