У меня есть сценарий, в котором я извлекаю журналы из tomcat и отправляю их в свой облачный ресурс. Все работает хорошо, но у меня проблема, когда мой кот вращает журнал.

Когда журналы поворачиваются, перед ним ставится префикс даты (журнал обновляется каждый день). Поскольку мой скрипт запускается каждые полчаса, я могу пропустить журналы при его ротации, потому что я получаю журналы с их статическим именем в примере logfile.log.

Перед поворотом файл будет выглядеть так:

logfile.log

После поворота это будет выглядеть так:

logfile.log.2012-10-09

Есть ли способы избавиться от этой проблемы?

Редактировать:

Мой сценарий:

cp /tomcat/logs/$logname $fileName 
gzip $fileName
s3cmd put $fileName.gz s3://x.x.x.x.x/$folderName

Заранее спасибо.

2
sriram 12 Окт 2012 в 17:16
Вы должны предоставить гораздо больше информации о вашем скрипте и соглашениях об именах файлов журналов.
 – 
weynhamz
12 Окт 2012 в 17:22
Можем ли мы увидеть ваш сценарий? Почему бы вам не перебрать все файлы с именем logfile.log*?
 – 
Niklas Hansson
12 Окт 2012 в 17:28
@NiklasHansson: Это проблема многих logfile.log.*. Я имел в виду, что logfile.log.previous_dates также включен, чего я не ищу.
 – 
sriram
12 Окт 2012 в 17:31
@TechliveZheng: Он останется нетронутым.
 – 
sriram
12 Окт 2012 в 17:31
Я не могу вам помочь без отрывка из вашего сценария. Вы не можете предоставить самые важные детали?
 – 
Niklas Hansson
12 Окт 2012 в 17:34

1 ответ

Лучший ответ

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

Вы можете где-нибудь сохранить файл журнала mtime последней резервной копии, а затем проверить как повернутые файлы журнала, так и текущий файл журнала. Если есть повернутый файл журнала, который новее, чем последний сохраненный mtime, вы можете добавить текущий файл журнала к повернутому, а затем сделать резервную копию. Если только текущий файл журнала новее, просто сделайте резервную копию.

Время mtime файла может быть получено с помощью: LC_ALL=C stat logfile.log | grep '^Modify' | cut -d: -f2- или метка времени unix с помощью date "+%s" --date="$(LC_ALL=C stat logfile.log | grep '^Modify' | cut -d: -f2-)"

4
weynhamz 12 Окт 2012 в 17:47