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, который был проигнорирован! Переименование файла исправило ротацию файла журнала:-)

Другие вопросы по тегам