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