Войти и открыть файлы

21

Как logrotate обрабатывает открытые файлы? Может ли logrotate вращать файлы, открытые процессом?

Кайл Брандт
источник

Ответы:

7

Для тех приложений, которые не принимают сигналы от logrotate, как описано Рори, я использую несколько методов.

  1. Используйте опцию copytruncate
  2. Добавьте оператор после поворота, чтобы перезапустить службу

Решение о том, какой из них использовать, зависит как от размера файлов журнала, так и от необходимости бесшовных журналов. Это будет анализ рисков с вашей стороны. Тем не менее, чтобы привести пример, я использую перезапуск после поворота на некоторых журналах, где я на самом деле должен использовать copytruncate. Тем не менее, файлы часто состоят из нескольких концертов, и их копирование может занять достаточно много времени, чтобы проигрывать одну или две секунды каждую ночь.

Скотт Пак
источник
Извините за beign слишком поздно, но я думаю, я мог бы сэкономить время другим, которые ищут эту проблему. Взгляните на другой подход, чтобы решить эту проблему. unix.stackexchange.com/a/122942/189725
Виктор
17

Похоже, я мог бы хотеть следующее, но все еще заинтересован в чьей-либо экспертизе по теме:

copytruncate
              Truncate  the original log file to zero size in place after cre‐
              ating a copy, instead of moving the old log file and  optionally
              creating  a new one. 
Кайл Брандт
источник
1
Это все равно что делать «cp что-то. Log что-то. Log.1;:> что-то», так что файл становится пустым, но дескриптор файла на нем не разрывается. Проблема в том, что время между двумя командами может привести к потере некоторой строки логов
radius
5

logrotate отправит правильный сигнал процессу, чтобы сказать ему, чтобы открыть файлы журнала. Он работает из коробки для таких вещей, как Apache или MySQL.

Вы можете увидеть это в постротационном скрипте для apache. Если у вас есть собственный демон и вы хотите, чтобы logrotate работал с ним, убедитесь, что он прослушивает определенный сигнал и повторно открывает файлы журнала.

Если вы не можете изменить программу, вы можете увидеть, есть ли у демона способ автоматической очистки журналов. Или добавьте prerotate, который останавливает сервер, и postrotate, который запускает его снова.

Рори
источник
Хорошо, не думаю, что я заставлю разработчиков сделать это, но приятно знать, что это за стандарт :-)
Кайл Брандт,