сценарий оболочки к grep в диапазоне в кроне

Я пытаюсь создать сценарий оболочки, который искал бы 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"`
# 

к сожалению, это решение ограничивает меня для работы почасовых оснований только.

Я думал, что буду задавать вопрос здесь и видеть, могу ли я найти лучшее решение затем моим.

0
задан 20 August 2015 в 18:45
1 ответ

Лучшим подходом было бы повернуть или переместить файл журнала ПЕРЕД их обработкой. что-то вроде

#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

Я надеюсь, что кто-то предложит лучший подход к методу ведения записей, который я предложил выше.

0
ответ дан 5 December 2019 в 12:16

Теги

Похожие вопросы