Вращающиеся журналы, сгенерированные процессом, который регистрирует в stdin
У меня длительный процесс, который записывает свой файл журнала в stdout
, Я хотел бы сохранить эти выходные данные в разные файлы, автоматически поддерживать эти файлы (например, удаляя / архивируя старые), не перезапуская основной процесс.
По решению было бы отправить вывод в файл (process > log.txt
) и использовать logrotate
на это, но logrotate
Необходимо перезапустить программу, что невозможно.
Другой - направить вывод в cronolog
(process | cronolog
), но в этом случае старые файлы не будут удалены / заархивированы, то есть я должен создать программу, которая будет выполнять техническое обслуживание для меня.
Лучше всего использовать обе утилиты, потому что с cronolog
Мне не нужно перезапускать процесс, и logrotate
будет поддерживать старые файлы журнала точно так, как я хочу. Есть ли способ заставить эти две программы работать друг с другом? Если нет, что является хорошим решением этой проблемы?
1 ответ
Multilog от daemontools от DJB может сделать (почти) именно то, что вы просите. Единственный недостаток, который мне известен, это то, что не во многих дистрибутивах есть пакет для daemontools.
Если вы не управляете своим приложением с svc
(часть daemontools) вам нужно найти способ передать вывод в команду типа
multilog t s1048576 n100 ./my_log_directory
Это переводится как:
t
: вставить временную метку tai64n (которую можно перевести в читаемое время с помощьюtai64nlocal
)s1048576
: поворот файла журнала, когда он увеличивается до 1 МБn100
: хранить не более 100 повернутых файлов./my_log_directory
: все, что начинается с.
или же/
- написать журнал в этот каталог
Записанный журнал будет иметь имя файла current
, и когда multilog вращает журнал, он будет переименован в @<tai64n timestamp>.s
где имя файла показывает время, когда файл был повернут. Расширение может быть .s
если файл был благополучно очищен, или .u
если это могло быть усечено.
Для получения дополнительной информации, просто проверьте ссылки.