Поверните файл, который открыт и записывается постоянно

У меня есть приложение Linux, которое постоянно записывает информацию о регистрации в файл журнала, например. /var/log/application.log, Поскольку приложение не поворачивает файл автоматически, этот файл журнала может достигать размера гигабайта в течение нескольких недель, поэтому я хочу иметь возможность правильно вращать этот файл

Моя главная проблема здесь заключается в том, что для поворота файла, который постоянно открывается приложением, мне, вероятно, потребуется:

  1. Переместить файл в повернутую форму /var/log/application.log -> /var/log/application.log.2013-01-28

  2. Создать пустой /var/log/application.log, Obs: На данный момент процесс подачи заявки все еще пишет /var/log/application.log.2013-01-28

  3. Измените файловый дескриптор процесса приложения, чтобы снова указывать на /var/log/application.log

Так я прав? Если так, как я могу это сделать? (в основном это изменение части файлового дескриптора)

Если нет, то как правильно и как это сделать?

2 ответа

Решение

Напиши logrotate Конфиг для использования copytruncate

copytruncate
    Truncate the original log file in place after creating a copy, instead of moving the 
    old log file and optionally creating a new one. It can be used when some program
    cannot be told to close its logfile and thus might continue writing (appending) to
    the previous log file forever. Note that there is a very small time slice between
    copying the file and truncating it, so some logging data might be lost. When this
    option is used, the create option will have no effect, as the old log file stays
    in place.

Большинство таких приложений реагируют на сигнал, такой как SIGHUPи закроет и снова откроет свои файлы журналов при получении сигнала. Проверьте документацию вашего приложения для правильного сигнала для отправки.

Другие вопросы по тегам