Я пытаюсь заставить logrotate работать на моем VPS для еженедельной ротации моих файлов apache. В настоящее время содержимое конфигурационного файла apache2 остается таким же.
"/var/www/user/site.com/logs/*.log" {
weekly
missingok
rotate 8
compress
delaycompress
notifempty
create 640 root adm
sharedscripts
postrotate
/etc/init.d/apache2 reload > /dev/null
endscript
}
Я оставил его на две недели, и, насколько я могу судить, ничего не изменилось. Когда я моделирую это из командной строки, я получаю следующий результат.
user@geneva:/var/lib/logrotate$ /usr/sbin/logrotate -d /etc/logrotate.d/apache2
reading config file /etc/logrotate.d/apache2
reading config info for "/var/www/user/site.com/logs/*.log"
Handling 1 logs
rotating pattern: "/var/www/user/site.com/logs/*.log" weekly (8 rotations)
empty log files are not rotated, old logs are removed
considering log /var/www/user/site.com/logs/access.log
log does not need rotating
considering log /var/www/user/site.com/logs/error.log
log does not need rotating
not running postrotate script, since no logs were rotated
Есть идеи относительно того, что Iv'e настроил неправильно?
Мой статусный файл тоже пуст :(
user@geneva:~$ cat /var/lib/logrotate/status
logrotate state -- version 2
Обновить
Я удалил файл состояния и произвел принудительный запуск logrotate, и теперь журналы выглядят так, как будто они были повернуты, а файл состояния выглядит более многообещающим!
sudo rm /var/lib/logrotate/status
sudo /usr/sbin/logrotate -f /etc/logrotate.conf
я так думаю weekly
означает, что logrotate хочет увидеть запись для вашего файла access.log как минимум неделю назад, чтобы повернуть ее.
Следовательно, проблема, похоже, в том, что вы не сохраняете запись состояния для запуска вращения.
Вот пошаговый пример простого случая, когда logrotate решает повернуть файл журнала.
(это пути Fedora, Ubuntu, Centos и т. д. могут быть разными)
(Я сделал несколько запросов http://localhost
поэтому в access_log есть записи, иначе logrotate никогда не вращается ...)
Итак, я установил свой логротат для apache на еженедельный режим;
/var/log/httpd/*log {
weekly
...
}
и изначально нет записи в /var/lib/logrotate.status
файл
# grep access_log /var/lib/logrotate.status
<- nothing
Таким образом, logrotate не поворачивает access_log
файл;
# /usr/sbin/logrotate -d /etc/logrotate.d/httpd
...
considering log /var/log/httpd/access_log
log does not need rotating
Однако, если я запустил logrotate вручную вот так:
# /usr/sbin/logrotate /etc/logrotate.d/httpd
теперь в файле состояний есть запись для httpd access_log;
# grep access_log /var/lib/logrotate.status
"/var/log/httpd/access_log" 2012-5-11
Однако apache по-прежнему не будет производить ротацию журнала, потому что записи всего 0 дней (2012-5-11);
# /usr/sbin/logrotate -d /etc/logrotate.d/httpd
considering log /var/log/httpd/access_log
log does not need rotating
Однако, если вы отредактируете файл состояния с помощью vi vi /var/lib/logrotate.status
так что-то вроде этого, чтобы установить дату более чем на неделю ...;
# grep access_log /var/lib/logrotate.status
"/var/log/httpd/access_log" 2012-4-11 <--- more than a week ago..
Затем logrotate теперь правильно поворачивает файл в соответствии с датой в файле состояния. 2012-4-11
быть больше недели назад с сегодняшнего дня 2012-5-11
# /usr/sbin/logrotate -d /etc/logrotate.d/httpd
considering log /var/log/httpd/access_log
log needs rotating <--- logrotate rotates the file.
(имейте в виду, что -d
вызывает пробный прогон, следовательно, полезен только для проверки, вы должны фактически запустить команду без -d
для записи статуса или поворота файлов и т. д.)
log does not need rotating
Это может быть из-за того, что ваши файлы журналов пусты.
Эта ситуация может произойти из-за того, что apache все еще записывает в предыдущий файл журнала, который был переименован без перезапуска apache. Итак, access.log стал access.log.1, и apache записывает в него.
Или у вас проблема со временем создания журнала:
ls -al --time=ctime /var/www/user/site.com/logs/
Я столкнулся с аналогичной проблемой, за исключением того, что ни один из этих ответов мне не помог. Мой файл журнала был огромным и старым, моя конфигурация была на 100% правильной и действительной, удаление файла состояния не помогло.
Оказалось, проблема была в повторяющиеся записи logrotate. Когда я запускаю logrotate вручную в своем файле конфигурации, только так:
logrotate -df /etc/logrotate.d/my_service_name
он не показал никаких ошибок, он просто сказал:
log does not need rotating
Я до сих пор не знаю почему. Но когда я запускаю полную команду logrotate вроде этой:
logrotate -f /etc/logrotate.conf
Получилась такая строчка:
error: my_service_name:1 duplicate log entry for /var/log/nginx/my_service_name.access.log
Оказалось, что конфигурационный файл logrotate для моей службы содержал записи для ротации журналов доступа nginx, а также сами журналы службы. И это противоречило конфигурации ngnix logrotate, в которой есть правило для всех записей nginx:
# grep nginx /etc/logrotate.d/*
/etc/logrotate.d/nginx:/var/log/nginx/*.log {
Так что решение для моего случая довольно простое: мне просто нужно было удалить конфликтующие журналы nginx правило вращения из моей конфигурации.
Я полагаю, что logrotate начал прерывать обработку файла при конфликте правил только в одной из последних версий. Я получаю эту ошибку с v.3.8.7, но под v.3.7.8 с той же конфликтующей конфигурацией он записывает ту же ошибку, но нормально вращается. Хотя я не смог найти никаких записей об этом в журнале изменений logrotate.
Попробуйте бежать sudo logrotate -f --verbose /etc/logrotate.d/apache2
Посмотрите, что написано в консоли, и исправьте все, что не так.
У меня была машина с Debian 7, которая после обновления системы больше не меняла журналы электронной почты. Все остальные журналы, кроме почтовых, были правильно повернуты. Я обнаружил, что почтовые журналы выросли на несколько гигабайт. Я всегда управлял ротацией логов через Webmin. Затем, бегая logrotate -d /etc/logrotate.conf
Я увидел следующее сообщение:
Ignoring rsyslog.dpkg-old, because of .dpkg-old ending
Оказалось, что мои записи о ротации почты были перечислены в /etc/logrotate.d/rsyslog.dpkg-old
, которое было проигнорировано! Переименование файла исправило ротацию файла журнала :-)