Logrotate не работает
Я пытаюсь заставить 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
5 ответов
Я думаю что weekly
означает, что logrotate хочет увидеть как минимум недельную запись для вашего файла access.log, чтобы повернуть его.
Следовательно, проблема заключается в том, что вы не сохраняете запись состояния для запуска вращения.
Вот пошаговый пример простого случая, когда logrotate решает повернуть файл журнала.
(это пути Fedora, Ubuntu, Centos и т. д. могут отличаться)
(Я сделал несколько запросов http://localhost
поэтому в access_log есть некоторые записи, иначе logrotate никогда не вращается...)
Таким образом, я установил свой 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
, который был проигнорирован! Переименование файла исправило ротацию файла журнала:-)