1

Я запускаю процесс в Linux (CentOS 7), который выдает большой вывод на стандартный вывод. Отправка всего этого в файл приведет к размеру файла более 1 ТБ. Но, к счастью, результат довольно сжимаемый - он состоит из множества довольно повторяющихся текстов.

Я думаю, могу ли я использовать какую-нибудь программу ротации логов, подобную описанной здесь: ( Ротация логов stdout? ), но где когда-то журнал больше не актуален, он сжимается (и никогда не удаляется)? Итак, я пишу, скажем, пару ГБ в файл, сжимаю его и продолжаю писать в новый файл?

1 ответ1

5

Вы можете использовать logrotate для этого. CentOS 7 использует systemd, поэтому вы можете настроить запланированную задачу logrotate примерно так:

  • Создайте файл конфигурации logrotate в /etc/systemd/system именем mylogrotate.config со следующим содержимым:

    /path/to/your/logfile/*.log {
        compress
        copytruncate
        delaycompress
        minsize 1G
        missingok
        nomail
        notifempty
        rotate 30
    }
    

Это скажет logrotate сделать следующее:

  • Старые версии файлов журналов по умолчанию сжимаются с помощью gzip.
  • Усечение исходного файла журнала после создания копии вместо перемещения старого файла журнала и, при необходимости, создания нового.
  • Отложите сжатие предыдущего файла журнала до следующего цикла ротации, чтобы получить два несжатых файла журнала.
  • Файлы журнала вращаются, когда они становятся больше, чем 1 Гбайт.
  • Если файл журнала отсутствует, перейдите к следующему без выдачи сообщения об ошибке.
  • Не отправляйте старые журналы на любой адрес.
  • Файлы журналов вращаются 30 раз перед удалением, поэтому у вас будет 30 старых файлов журналов. Все, что старше этого, будет удалено.

Создайте сервис systemd. Создайте файл в /etc/systemd/system именем mylogrotate.service со следующим:

[Unit]
Description=Rotate My Log

[Service]
Type=oneshot
ExecStart=/usr/sbin/logrotate /etc/systemd/system/mylogrotate.config --state /etc/systemd/system/mylogrotate.state --verbose

Давайте наметим эту задачу. Создайте третий файл в /etc/systemd/system именем mylogrotate.timer со следующим:

[Unit]
Description=Rotate My Log Timer

[Timer]
OnCalendar=*:00:00
Persistent=true

[Install]
WantedBy=timers.target

Это будет запускать logrotate каждый час.

Все было настроено. Теперь включите запланированное задание.

systemctl enable mylogrotate.timer
systemctl start mylogrotate.timer

Конечно делайте все это как root.

(Я нахожусь на Ubuntu, но я надеюсь, что это будет работать на CentOS без проблем)

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .