Вы можете использовать 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 без проблем)