Нужно каждые 10 минут отображать текущий журнал с ключевым словом, но каждые 15 минут нужно проверять новые строки

Нужно каждые 10 минут выполнять поиск по текущему журналу с помощью "ключевого слова", но каждые 15 минут нужно проверять новые строки. Это для солнечных соляриев, поэтому часы не будут работать.

Например, при первом запуске он должен получить первые 200 строк с ключевым словом. для следующего запуска нужно набрать от 201 до 400 строк и так далее.

1 ответ

Если вы не хотите получать выходные данные tail -f, вы должны помнить, где вы были в последний раз, когда вы получали grep.
Когда вы можете контролировать файл журнала, у вас есть несколько возможностей:

  • Убедитесь, что каждая строка начинается с отметки времени;
    Когда некоторые строки имеют, а некоторые нет, вы можете использовать awk для выбора части файла журнала.
  • Добавьте уникальный маркер в файл журнала, выберите журналы между двумя последними маркерами с помощью awk и grep;
  • Переместите файл журнала в другое место (приложение не должно иметь дескриптор открытого файла);
    у вас будут только последние 15 минут в лог-файле
  • Скопируйте файл журнала после grep и в следующий раз grep из diff между 2 файлами.
    Когда файлы большие, вы можете пропустить некоторые строки. Вам нужен дополнительный файл tmp, чтобы предотвратить это.

Только временная метка - хорошее решение, остальные безобразны. Так что вы можете сделать больше?
Что-то вроде

LINECOUNTFILE=/var/tmp/mycount
LOGFILE=/var/xxxx.log

if [ -f ${LINECOUNTFILE} ]; then
   lastlinecount=$(cat ${LINECOUNTFILE})
else
   lastlinecount=0
fi
if [ -f ${LOGFILE} ]; then
   newlinecount=$(cat ${LOGFILE} | wc -l)
   # Select a solution as described at 
   # http://unix.stackexchange.com/questions/47407/cat-line-x-to-line-y-on-a-huge-file
   echo TODO grep from the file between $lastlinecount and $newlinecount 
else
   newlinecount=0
fi
echo ${newlinecount} > ${LINECOUNTFILE}
Другие вопросы по тегам