Как logrotate обрабатывает открытые файлы? Может ли logrotate вращать файлы, открытые процессом?
Похоже, мне может понадобиться следующее, но я все еще заинтересован в чьей-либо экспертизе по этой теме:
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.
Для тех приложений, которые не принимают сигналы от logrotate, как описал Рори, я использую несколько методов.
Решение о том, какой из них использовать, зависит как от размера файлов журнала, так и от необходимости бесшовных журналов. Это будет анализ рисков с вашей стороны. Однако, чтобы привести пример, я использую перезапуск после ротации для определенных журналов, где мне действительно нужно использовать copytruncate. Однако файлы часто представляют собой несколько концертов, и копирование может занять достаточно много времени, поэтому предпочтительнее терять секунду или две каждую ночь.
logrotate отправит процессу правильный сигнал, чтобы он снова открыл файлы журнала. Он работает "из коробки" для таких вещей, как apache или mysql.
Вы можете увидеть это в скрипте postrotate для apache. Если у вас есть собственный демон, и вы хотите, чтобы с ним работал logrotate, убедитесь, что он прослушивает определенный сигнал и повторно открывает файлы журнала.
Если вы не можете изменить программу, вы можете увидеть, есть ли у демона способ автоматически очищать журналы. Или добавьте предварительное вращение, которое останавливает сервер, и последующее вращение, которое запускает его снова.