Логирование файлов в Ubuntu по времени или размеру

Как правило логированием системных файлов занимается сама система и справляется с этим весьма неплохо
Но иногда тот или иной файл нужно логировать с параметрами которыми нужны исключительно вам. Например когда какой то из логов растет катастрофически быстро и забивает все свободное место на диске за час. Будем с этим бороться
Рассмотрим для примера основной файл куда пишутся логи, а именно syslog. В стандартном случае он ротируется раз в сутки самой системой. Но мы не будем трогать этот график, а добавим еще один.

Создайте новый файл конфигурации syslog со следующими настройками

sudo tee <<EOF >/dev/null /etc/logrotate.d/syslog
/var/log/syslog
{
        su root adm
        rotate 7
        hourly
        size 1G
        missingok
        notifempty
        delaycompress
        compress
        postrotate
                /usr/lib/rsyslog/rsyslog-rotate
        endscript
}
EOF

 

rotate 7   Хранить до 7 ротированных файлов
hourly   Ротировать каждый час
size 1G  Ротировать, когда размер файла достигает 1 ГБ
missingok  Не выдавать ошибку, если лог-файл отсутствует
notifempty  Не ротировать пустые файлы
compress  Сжимать ротированные файлы

Теперь logrotate будет следить за файлом /var/log/syslog и ротировать его каждый час если его размер достигнет 1 гигабайта. Ротированные файлы будут сжиматься, и будет сохранено до 7 последних ротированных файлов.

logrotate обычно запускается автоматически по расписанию через cron. Он обрабатывает все файлы конфигурации, расположенные в каталоге /etc/logrotate.d/. Вы также можете запустить его вручную, выполнив команду:

sudo logrotate -f /etc/logrotate.d/syslog