Oracle
 sql >> база данни >  >> RDS >> Oracle

Logrotate за почистване на файлове с щампа с дата

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 и други подобни опции, които са свързани с това как изходният лог файл се създава от външен процес и как реагира на акта на ротация.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. курсор в тригер

  2. Codeigniter и oracle недефинирана константа:OCI_COMMIT_ON_SUCCESS

  3. Анти-съединяването по-ефективно ли е от лявото външно съединение?

  4. Избиране на ограничен низ като таблица в Oracle sql

  5. Грешка при връщане назад на JDBC транзакция при затворена връзка