Назад | Перейти на главную страницу

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

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

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

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

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

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

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

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

Напиши 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, и закроет и снова откроет свои файлы журналов при получении сигнала. Проверьте документацию вашего приложения, чтобы найти правильный сигнал для отправки.