Я хотів би стежити за своїми журналами 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
Це обрізання перших кількох символів журналу. Це не для кожного рядка, але більшість. Також багато рядків просто відсутні. Я здогадуюсь, я не передушив час перегону, коли обробка моєї обробки не закінчується. Як я можу обійти це?
EDIT Я думаю, у мене є 3 варіанти:
Не використовуйте хвіст і намагайтеся використовувати комбінацію таких речей, як робота cron / grep, щоб перевірити журнал на новий запис. Я думаю, це може бути складним. Як дізнатись, що нового в цьому журналі?
Контролюйте зміну файлу за допомогою monit або еквівалент. Я не вірю, що це варіант. Файли зберігаються у дещо випадкових каталогах з іменами файлів, які мають печатку часу.
logstash або ін. Я не думаю, що ці програми відповідають моїм потребам. Але, можливо, хтось знає інакше.
Зараз я зосереджуюсь на №1 без хороших результатів. Тож будь-які думки з цього приводу були б вдячні.