Что было. На сервере с Ubuntu 16.04 syslog и mail.log растут месяцами; ручной logrotate -f /etc/logrotate.conf отрабатывает нормально. Значит, конфигурация в порядке, а не работает запуск по расписанию.
Причина. В /etc/cron.daily/ не оказалось скрипта logrotate: его когда-то удалили или он потерялся при неаккуратной чистке. Участник посоветовал переустановить пакет с восстановлением отсутствующих конфигурационных файлов:
sudo apt-get install --reinstall -o Dpkg::Options::=--force-confmiss logrotate
Обычный --reinstall пропущенные конфиги не возвращает (dpkg считает удалённый администратором конфиг осознанным решением); ключ --force-confmiss заставляет вернуть их. Ротация возобновилась; подтверждено.
Как это устроено на современных системах. На Ubuntu 18.04+ logrotate запускается не из cron, а таймером systemd: logrotate.timer → logrotate.service раз в сутки. Проверка:
systemctl status logrotate.timer # active (waiting), следующий запуск
systemctl list-timers logrotate*
journalctl -u logrotate.service -n 20 # результат последнего запуска и ошибки
Если таймер отключён или замаскирован, systemctl enable --now logrotate.timer. Файл /etc/cron.daily/logrotate в таких системах может присутствовать, но проверяет, не запущен ли systemd, и ничего не делает.
Порядок диагностики «не ротируется».
- Запуск по расписанию есть? (таймер или cron, см. выше; на старых системах
grep -r logrotate /etc/cron*). - Запуск проходит без ошибок?
logrotate -d /etc/logrotate.conf(отладочный прогон всех конфигов) покажет первую ошибку, из-за которой пропускается блок (права каталога, дубликат пути в двух конфигах, синтаксис). - Файл уже ротировали недавно?
/var/lib/logrotate/statusхранит даты; приweeklyследующая ротация только через неделю после записи, даже если файл огромный. Для ротации по размеру использоватьmaxsize, а не только период. - Приложение продолжает писать в старый файл после ротации? Нужен
postrotateс сигналом приложению илиcopytruncate.
Общее правило восстановления файлов пакета. dpkg -V logrotate покажет отсутствующие или изменённые файлы пакета; --force-confmiss вернёт конфиги, --reinstall вернёт бинарники. Для системных скриптов, удалённых по ошибке, это быстрее, чем искать их копии.
Утилита описана в документации Ubuntu.