Нужно каждые 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}