Я пытаюсь создать сценарий оболочки, который искал бы 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
Я надеюсь, что кто-то предложит лучший подход к методу ведения записей, который я предложил выше.