Я пытаюсь настроить logrotation, чтобы вращать журналы ежедневно, в течение 14 дней. Во время пост-поворота, он будет вызывать отдельный скрипт для регистрации любого журнала старше 10 дней. Файлы старше 14 дней будут удалены.
Пока что вращение работает нормально, но у меня возникли проблемы с тестированием, учитывая временную шкалу, необходимую для этого. Можно ли как-нибудь протестировать эту настройку так, чтобы не пришлось ждать 14 дней, поскольку это не очень практично.
Кроме того, здесь приведены мои настройки и сценарий tar. Что-то не так с учетом моих требований?
logrotate.conf
/home/user1/services/logs/*/*.log{
# Rotate logs daily
daily
copytruncate
missingok
notifempty
# Keep 14 days worth of backlogs
rotate 14
maxage 14
# create new (empty) log files after rotating old ones
create
# use date as a suffix of the rotated file
dateext
dateformat .%Y-%m-%d
# compress your logs
nocompress
#postrotate scripts to tar logs that are too old.
postrotate
/home/user1/service/logrotate/archive.sh
endscript
}
архив. sh:
#!/bin/bash
rotateDate=[0-9]{4}-[0-9]{2}-[0-9]{2}
shopt -s nullglob
for file in $HOME/services/logs/*/*.log.[0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9]; do
log=$(basename "$file")
find . -type f -mtime +10 | tar -zcvf "$file.tar" "$log"
done
Редактировать: Запустив мой скрипт ночью я заметил, что archive.sh
работает неправильно. Вместо того, чтобы находить старые файлы и проверять их, я вижу, что файл журнала, который был повернут прошлой ночью, был тарифицирован.
У меня должно быть:
test.log
test.log.2020-04-09
test.log.2020-04-08
и затем я не вижу никаких таров до тех пор, пока файлу не исполнится 10 дней.
Вместо этого у меня есть:
test.log
test.log.2020-04-09
test.log.2020-04-09.tar
test.log.2020-04-08
test.log.2020-04-08.tar