Назад | Перейти на главную страницу

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

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