Я хотел бы отслеживать мои журналы vsftpd и извлекать информацию из журналов для обработки загруженных файлов. До сих пор все было отлично и работало нормально:
tail -n0 -F /var/log/vsftpd.log | while read line; do
if echo "$line" | grep -q 'OK UPLOAD:'; then
#do a bunch of processing stuff - this takes some time
fi
done
Я начал проводить масштабное тестирование и загрузил сразу 500 файлов. По какой-то причине строки журнала отсутствуют или они обрезаются, когда вы загружаете так много вещей. Например, типичная строка выглядит так:
Sun Apr 7 09:08:51 2013 [pid 25409] [cam02430] OK UPLOAD: Client "206.132.183.201", "/20130407/09/20130407_090842D.avi", 531792 bytes, 426.14Kbyte/sec
Но иногда строка выглядит так (если не отсутствует полностью):
:08:51 2013 [pid 25409] [cam02430] OK UPLOAD: Client "206.132.183.201", "/20130407/09/20130407_090842D.avi", 531792 bytes, 426.14Kbyte/sec
Это отрезает первые несколько символов журнала. Он делает это не для каждой строки, а для большинства. Также многие строки просто отсутствуют. Я предполагаю, что у меня есть состояние гонки, когда моя обработка не заканчивается вовремя. Как я могу обойти это?
РЕДАКТИРОВАТЬ Я думаю, у меня есть 3 варианта:
Не используйте tail и попробуйте использовать сочетание таких вещей, как cron job/grep, чтобы проверить журнал на наличие новой записи. Я думаю, что это может быть сложно. Как мне узнать, что нового в этом журнале?
Контролируйте изменение файла с помощью monit или эквивалентного. Я не верю, что это вариант. Файлы хранятся в несколько случайных каталогов с именами файлов с отметкой времени.
logstash или эквивалентный Я не думаю, что эти программы соответствуют моим потребностям. Но, может быть, кто-то знает иначе.
Прямо сейчас я сосредотачиваюсь на # 1 без хороших потенциальных клиентов. Так что любые мысли по этому поводу будут оценены.