Вы в значительной степени указали, в чем проблема:
- У вас есть журнал, который автоматически катится, когда журнал достигает определенного размера.
- У вас есть другая работа, котораяработает с файлом журнала, и только с файлом журнала.
- Нельзя настроить список журналов и настроить его, когда происходит проверка журнала.
Таким образом, если файл журнала изменяется, вы ищете не тот файл.Можете ли вы проверить все файлы журнала, которые вы ранее не проверяли с помощью пакетного скрипта?Или вам разрешено только проверять текущий файл журнала?
Один из способов сделать это - отслеживать, когда вы в последний раз проверяли файлы журнала, а затем проверять все те файлы журнала, которые были новее, чем в прошлый раз, когда высделал проверку.Для этого вы можете использовать файл с именем last.check
.В этом файле нет содержимого (содержимое не имеет значения), но вы используете временную метку для этого файла, чтобы выяснить, когда в последний раз работал ваш журнал.Затем вы можете использовать touch
для изменения метки времени после успешной проверки журналов:
last_check="$log_dir/last.check"
if [ ! -e "$last_check" ]
then
echo "Error: $last_check doesn't exist"
exit 2
fi
find $log_dir -newer "$last_check" | while read file
do
[Whatever you do to check for nullpointerexception]
done
touch "$last_check"
Вы можете создать исходный файл $last_check
с помощью команды touch
:
$ touch -m 201111301200.00 $log_dir/last.check #Touch date is in YYYYMMDDHHMM.SS format
Использование сенсорного файла обеспечивает большую гибкость в случае изменения ситуации.Например, что если вы решите в будущем запускать crontab каждый час, а не каждые 30 минут.