Коли використовувати опцію delaycompress у логротаті?


33

Сторінка людини logrotateговорить, що:

It can be used when some program cannot be told to close its logfile
and  thus  might  continue writing to the previous log file for some
time.

Мене це бентежить. Якщо програмі не вдасться сказати закрити свій логін-файл, вона продовжуватиме писати вічно , а не колись . Якщо стиснення перенесено на наступний цикл обертання, програма продовжує записувати в цей файл навіть після наступного циклу обертання. Як відкладається вирішення проблеми?

Я розумію, що його copytruncateслід використовувати, коли програмі не можна сказати закрити файл журналу. Мені відомо, що деякі дані, записані в файл реєстрації, втрачаються, коли копія виконується.

Я дивився файл logrotate для couchdb, і він мав copytruncateі delaycompressваріанти, і варіанти.

/usr/local/couchdb-1.0.1/var/log/couchdb/*.log {
   weekly
   rotate 10
   copytruncate
   delaycompress
   compress
   notifempty
   missingok
}

Схоже, немає сенсу використовувати, delaycompressколи copytruncateвже є. Що я пропускаю?

Відповіді:


27

Ваше розуміння copytruncateправильного, але формулювання в мапарі для сторінки delaycompressтрохи вводить в оману. Більш правильно, він повинен сказати, "коли якійсь програмі не можна сказати негайно закрити файл реєстрації", - наприклад, якщо ви використовуєте спільні сценарії та сценарій посилає сигнал до процесу, використовуючи журнал, коли всі файли журналу повернуті. .


1
Коли я використовую copytruncate, не потрібно казати програмі закривати її логін. Тож чи безглуздо вказувати delaycompressразом із copytruncate?
Ананд Чітіпоту

6
Ніколи не використовуйте, copytruncateякщо вам абсолютно не доведеться, оскільки він втрачає записи журналу. Ви можете використовувати обидва варіанти, якщо хочете іншу функцію, яка delaycompressнадає - можливість зчитувати попередній файл файлів, не потребуючи його попереднього розпакування.
живіт

Чи є інший варіант, крім того, copytruncateякщо я не можу сказати програмі перезавантажуватися?
Ананд Чітіпоту,

5
Ні. Тому ви повинні використовувати програмне забезпечення, яке не смокче, і яке прийме сигнал про те, що "перезавантажте свої журнали".
живіт

3

Не впевнений, чи я повністю розумію ваше запитання, але якщо ви запитуєте, що я думаю ... Я використовую це:

postrotate
          killall -HUP syslog-ng
  endscript

Це приємний (або принаймні а) спосіб вбити журнал і перейти до наступного. Для "програм", які висмоктуються, таких як платформа ASA Cisco, яка записує тони даних в секунду, вона працює.


3

Ми використовуємо:

  • щодня
  • затримка компресу
  • nodateext

Це створює фіксовану копію apache, access_log access_log.1щоб ми могли в кінці дня запустити наш пакет Stats як сценарій.

Наступного дня логротат стискає створення файлу access_log.2.zip

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.