zubastiy |
|
Темы:
136
Сообщения:
548
Участник с: 18 сентября 2009
|
Добрый день. Есть астериск на котором летит debug в лог. В день примерно 1.2-2.0 гига. Надо отлавливать определенные события и делать с ними всякое. Корректно ли сделать tail -f с проверкой if прилетающих строк на события? типа tail -f | while read n; do if [ парсинг строки совпал с error ]; then blabla elseif [ парсинг строки совпал и тд Или правильнее ротировать лог каждые пять минут, проверять получившийся кусок и проверять следующий? |
Natrio |
|
Темы:
47
Сообщения:
4763
Участник с: 08 января 2011
|
Возможная проблема такой реализации – в случае ротации лога без ведома вашего скрипта, старый лог будет переименован, а новый заново создан, при этом ваш скрипт останется "висеть" на старом, потому что после открытия файла он привязан уже не к имени, а к дескриптору файла, который при переименовании не меняется. |
zubastiy |
|
Темы:
136
Сообщения:
548
Участник с: 18 сентября 2009
|
Natrio спасибо. учту. по идее logortate у меня логи крутит, можно на него повестить ответственность по перезапуску парсинга лога. |
zubastiy |
|
Темы:
136
Сообщения:
548
Участник с: 18 сентября 2009
|
тренируюсь вот на кошках работает tail -f somelog | while read n do; lalal #!/bin/bash SLC () { logger 'CONNECTION' } SLD () { logger 'DISCONNECTED' } tail -f /var/log/asterisk/full | while read n; do if [ "`echo $n | grep -o 'connection$'`" = "connection" ]; then SLC && continue elif [ "`echo $n | grep -o 'disconnected$'`" = "disconnected" ]; then SLD fi; done (помню про дескриптор, это пока за рамками) периодически в лог прилетает 20к строчек (не попадающие под выборку, тоесть чисто операции сравнения). скрипт занимает 10-11 процентов проца, секунд этак на 60 ) можно как то оптимизировать процесс сравнения? 7-8 условий сравнения это процесс удлинят по времени огого. |
Natrio |
|
Темы:
47
Сообщения:
4763
Участник с: 08 января 2011
|
Для сравнения строк есть специальные операции проверки, встроенные в баш. Если пользоваться регулярными выражениями, это можно сделать так: if [[ $n =~ connection$ ]] ; then SLC elif [[ $n =~ disconnected$ ]] ; then SLD fi case "$n" in *connection) SLC ;; *disconnected) SLD ;; esac |
zubastiy |
|
Темы:
136
Сообщения:
548
Участник с: 18 сентября 2009
|
Natrio спасибо, в очередной раз ) c регулярками тот же объем отработал за 5 секунд, ядро нагрузило до 47 процентов. |
zubastiy |
|
Темы:
136
Сообщения:
548
Участник с: 18 сентября 2009
|
а еще меня потыкали в мануал tailtail -F same as --follow=name --retry |