Я пытаюсь создать сценарий оболочки, который будет искать ERROR
Внутри /var/log/jbossas/standalone/server.log
, например:
# grep ERROR /var/log/jbossas/standalone/server.log
10:36:37,530 ERROR [class X] (ajp-/192.168.X.X:8009-20) THIS IS A TEST
#
скрипт будет выполнен через cron
, поэтому он должен искать ошибку только в течение определенного периода времени, иначе при каждом выполнении могут быть дублирующиеся электронные письма.
это мое текущее решение:
# crontab -l
@hourly grep ERROR /var/log/jbossas/standalone/server.log | grep `date +%H --date="1 hour ago"`
#
к сожалению, это решение ограничивает меня возможностью работать только на почасовой основе.
Я думал, что задам вопрос здесь и посмотрю, смогу ли я найти лучшее решение, чем мое.
Лучшим подходом было бы повернуть или переместить файл журнала ПЕРЕД их обработкой. что-то вроде,
#cp /path/to/log /path/to/moved_log/log.timestamp && echo > /path/to/log && grep ERROR /path/to/moved_log/log.timestamp
В качестве альтернативы вы можете использовать не очень предпочтительный подход, подсчитать количество строк в существующем файле журнала и обработать его. Сохраните номер где-нибудь и используйте tail, чтобы получить все строки из журнала из последней обработанной строки.
Первое исполнение:
# wc -l /path/to/log > /var/tmp/log.num
# grep ERROR /path/to/log
Последующее выполнение (внутри cron):
tail -n + $(cat /var/tmp/log.num) | grep ERROR
wc -l /path/to/log > /var/tmp/log.num
Я надеюсь, что кто-нибудь предложит лучший подход к методу ведения записей, который я предложил выше.