Я пишу скрипт на BASH, который должен проверять файлы журналов на наличие ошибок.Я планирую запускать это как cron каждый час, поэтому я хочу, чтобы он только возвращал записи типа ERROR, которые произошли в течение последнего часа (все время сервера по Гринвичу).Я устанавливаю следующие переменные
# Log file directory
LOGPATH="/path/to/logs/"
# Current date and time
CURDATE=`date +%Y-%m-%d`
CURTIME=`date +%H:%M:%S`
# Old date and time
OLDDATE=`date +%Y-%m-%d -d "1 hour ago"`
OLDTIME=`date +%H:%M:%S -d "1 hour ago"`
Все файлы журнала соответствуют формату имени файла ktYEAR-MONTH-DAY.root.log.txt, где YEAR / MONTH / DAY заменяются датой записи записейв. Так, например, сегодняшний файл журнала будет kt2011-08-15.root.log.txt.Пример записи содержимого:
2011-08-15 | 19:30:02 | ERROR | 18333 | 337 | n/a | dms | default | error | XMLRPC Lucene - addDocument - Reason: Failed to parse XML-RPC request: An invalid XML character (Unicode: 0xb) was found in the element content of the document.
Интересующие столбцы: 1-й, 2-й, 3-й (значение может быть «INFO», «DEBUG» и т. Д., Но меня интересует только когда «ERROR»значение) и последний столбец, являющийся телом сообщения журнала.
Я пытаюсь выполнить этот скрипт BASH для анализа файлов, в которых есть записи, охватывающие последний час активности (как определено в 1-м и 2-м столбце), и если 4-й столбец содержит строку «ОШИБКА», то отобразите содержимое самого правого столбца.Моя путаница возникает, когда я пытаюсь определить, как анализировать файлы журналов на основе $CURTIME
и $OLDTIME
, что еще хуже, когда наступает полночь, и мне приходится искать в файле журнала предыдущего дня.Я бы предпочел не выполнять общий поиск в стиле grep по всем файлам журналов, так как количество и размер могут быть чрезмерными, но если это так, то так и будет.