Как запустить скрипт вскоре после того как строчка появился в лог-файле?
Частая проблема - что-то не работает, а когда админ добирается до проблемы - проблема уже ушла, все работает, нечего отлаживать. Что-то есть в логах, но многого (load average, количество HTTP соединений, итд - нету). Надо ждать следующего раз (и надеяться, что удастся сразу увидеть все).
Вот есть проблема, которая приводит к определенной записи в логе. Теоретически, я могу сделать tail -f и быстро-быстро читать лог (загруженный почтовый сервис) и через три дня она появится снова и я тут же посмотрю, какие процессы запущены, какая загрузка системы, и прочий траблшутинг.
Естественно, хочется это как-то автоматизировать. То есть, нужна какая-то программка, которой указываешь 1) за каким файлом следить 2) что искать (подстрога, регекс) и 3) что запускать. И когда появится запись в логе, она запустит мой скрипт и он уже соберет всю нужную информацию о системе, проверит все что нужно проверить.
Есть ли что-то такое, или может быть как-то на синей изоленте можно собрать из имеющегося?
Самое простое - скрипт по крону.
Чуть посложнее - централизованный мониторинг, который будет не только следить за лог-файлами, но и вообще за сервером(ами).
В том и проблема, что проблема - редкая. Поэтому кроновский скрипт через минуту - уже поздно, он будет проверять уже другое состояние сервера. Нужно именно асинхронное что-то, чтобы между обнаружением проблемы и запуском всякой диагностики прошло минимум времени.
1. Сохраняете время модификации.
2. Если время == предыдущему сохраненному, то ничего не изменилось.
3. Читаете файл начиная с offset
4. Делаете грепы или что вы там хотите
5. Сохраняете новый offset
6. Повторяем
Дмитрий Дерепко, еще надо учитывать ротации файлов. но я где-то встречал утилиту которая что-то подобное делает. типа как cat, но второй раз выдаст только новые строки. Чтобы велосипед не писать - он уже есть какой-то, но не помню какой.
Мы нормальные. Пожалуйста, веб-разработчики, не лезьте в незнакомые вам сферы, если ТС не указал, что лог большой, то он не большой. Даже 300 мегабайт можно быстро провернуть ради отлива ошибки.
Рональд Макдональд, да он большой, но ради великой цели грузить машинку не жалко. Другое дело, что те же самые 300мб каждую минуту обрабатывать - как-то неправильно. (и если строчка в них появится один раз только в сутки, то нагрепываться она будет 24*60 раз, каждую минуту).