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

10

У меня есть приложение 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

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

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

Бруно Полако
источник
Вам нужно очистить файл или просто повернуть его?
Ewwhite
Какое приложение? Приложение должно предоставить поддержку, чтобы сделать это правильно. (В противном случае вы можете сделать очень уродливую вещь - присоединиться к процессу, открыть новый файл, dup2новый дескриптор поверх старого, а затем закрыть новый дескриптор.)
Дэвид Шварц
Интересный подход Шварца. Мне любопытно увидеть это в действии и поиграю с этим некоторое время. Во всяком случае, приложение находится в доме, и я ищу более общее решение. Мне нравится ответ kormoc между прочим
Bruno Polaco
@ белый, мне нужно повернуть его, я не могу позволить себе потерять данные журнала
Бруно Полако

Ответы:

11

Напишите 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.
RS
источник
Интересно, что усечение файла после копирования кажется довольно умным, даже с запасом потери данных. Я не заметил эту опцию на logrotate. Спасибо за понимание :)
Бруно Полако
1

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

Майкл Хэмптон
источник
И если это не так, вы можете перезапустить приложение как запасной вариант. Это то, что обычно делает syslog, и довольно много других программ.
LSD