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

Ротация журналов, созданных процессом, который ведет журнал на стандартный ввод

У меня есть длительный процесс, который записывает свой файл журнала в stdout. Я хотел бы сохранить этот вывод в разные файлы, автоматически поддерживать эти файлы (например, удалять / архивировать старые) без перезапуска основного процесса.

Решением было бы отправить вывод в файл (process > log.txt) и используйте logrotate на нем, но logrotate необходимо перезапустить программу, что невозможно.

Другой - направить вывод на cronolog (process | cronolog), но в этом случае старые файлы не будут удалены / заархивированы, что означает, что мне нужно создать программу, которая будет выполнять обслуживание за меня.

Лучше всего иметь возможность использовать обе утилиты, потому что с cronolog Мне не нужно перезапускать процесс, и logrotate буду поддерживать старые файлы журналов именно так, как я хочу. Есть ли способ заставить эти две программы работать друг с другом? Если нет, то как лучше решить эту проблему?

Мультилог от DJB DAEMON Tools может сделать (почти) именно то, о чем вы просите. Единственный недостаток, о котором я знаю, это то, что не во многих дистрибутивах есть пакет для DAEMON Tools.

Если вы не управляете своим приложением с помощью 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 если он мог быть усечен.

Для получения дополнительной информации просто проверьте ссылки.