Logrotate премахва файлове според реда в лексикално сортиран списък с имена на ротирани регистрационни файлове, а също и по възраст на файла (използвайки времето на последната модификация на файла)
-
завъртане е максималният брой завъртани файлове, който можете да намерите. Ако има по-голям брой ротирани регистрационни файлове, техните имена се сортират лексикално и най-малките от лексикална гледна точка се премахват.
-
максимален дефинира друг критерий за премахване на ротирани регистрационни файлове. Всеки ротиран лог файл, който е по-стар от дадения брой дни, се премахва. Имайте предвид, че датата се открива от времето на последната модификация на файла, а не от името на файла.
-
формат на датата позволява специфично форматиране за дата в завъртани файлове. Наръчната страница отбелязва, че форматът ще доведе до лексикално правилно сортиране .
-
вчера позволява използването на дати в имената на регистрационните файлове един ден назад.
За да запазите даден брой дни в ежедневно ротирани файлове (напр. 7), трябва да зададете rotate
до стойност 7 и можете да игнорирате maxage
, ако вашите файлове се създават и редуват наистина всеки ден.
Ако създаването на журнал не се случи в продължение на няколко дни, напр. за 14 дни броят на ротираните регистрационни файлове ще остане същият (7).
maxage
ще подобри ситуацията в сценарии „непроизведени регистрационни файлове“, като винаги премахва твърде стари файлове. След 7 дни без генериране на регистрационни файлове няма да има ротирани регистрационни файлове.
Не можете да използвате dateformat
както показва OP, тъй като не може да се сортира лексикално. Объркване с dateformat
вероятно ще доведе до премахване на други ротирани регистрационни файлове, отколкото наистина сте искали.
Съвет :Стартирайте logrotate от командния ред с -d
опция за извършване на суха работа:ще видите какво би направил logrotate, но всъщност не прави нищо. След това изпълнете ръчно изпълнение с -v
(подробно), за да можете да потвърдите, че това, което е направено, е това, което искате.
Решение:чисти регистрационни файлове, създадени от cron
Концепцията е:
Позволете на cron да създава и актуализира регистрационните файлове, но направете малка модификация, за да създавате файлове, като следвате logrotate стандартни имена на файлове, когато използвате dateext
по подразбиране
/data/tier2/scripts/logs/recover_standby_SID.log-`date +\%Y\%m\%d`.log
Използвайте logrotate само за премахване на твърде стари лог файлове
- насочване към несъществуващ регистрационен файл
/data/tier2/scripts/logs/recover_standby_SID.log
- използвайте
missingok
за да позволи почистването на logrotate да се случи - задайте
rotate
достатъчно високо, за да покрие броя на регистрационните файлове, които да се пазят (най-малко 7, ако ще има един „завъртян“ лог файл на ден, но можете безопасно да го зададете много високо като 9999) - задайте
maxage
до 7. Това ще премахне файлове, чийто период на последна модификация е по-дълъг от 7 дни. dateext
се използва само за да се гарантира, че logrotate търси по-стари файлове, изглеждащи като завъртяни.
Конфигурационният файл на Logrotate ще изглежда така:
data/tier2/scripts/logs/recover_standby_SID.log {
daily
missingok
rotate 9999
maxage 7
dateext
}
Решение:ротирайте директно чрез logrotate веднъж на ден
Не съм сигурен как се създава резервният файл за възстановяване на източника, но предполагам, че Oracle или някой ваш скрипт редовно или непрекъснато се добавя към файл /data/tier2/scripts/logs/recover_standby_SID.log
Концепцията е:
- завъртете файла веднъж на ден чрез
logrotate
- работи директно с лог файл, съдържащ данни за възстановяване
/data/tier2/scripts/logs/recover_standby_SID.log
daily
ще предизвика ротация веднъж на ден (по отношение на това какcron
разбираdaily
)rotate
трябва да бъде зададено на 7 (или всяко по-високо число).maxage
зададено на 7 (дни)dateext
за използване на суфикса за дата logrotate по подразбиранеdateyesterday
използвани, за да причинят суфиксите за дата в завъртани файлове да бъдат един ден назад.missingok
за почистване на по-стари файлове, дори когато няма ново съдържание за завъртане.
Конфигурацията на Logrotate ще изглежда така:
data/tier2/scripts/logs/recover_standby_SID.log {
daily
missingok
rotate 7
maxage 7
dateext
dateyesterday
}
Имайте предвид, че може да се наложи да си поиграете малко с copytruncate
и други подобни опции, които са свързани с това как изходният лог файл се създава от външен процес и как реагира на акта на ротация.