logrotate не будет вращать мои логи автоматически

8

У меня два разных (i386 v AMD) бокса Debian, и у меня одна и та же проблема. logrotate не будет вращать мои журналы автоматически. Он работает нормально, когда я заставляю его вручную, как

/usr/sbin/logrotate -f /etc/logrotate.conf

но это не хорошо для меня.

Настройки не были изменены (по крайней мере, я не изменял их), AMD-установка - новая установка, но она не справится со своей задачей.

Если вы заметили похожую проблему, пожалуйста, помогите мне.

Обновление (некоторые данные сервера):

logrotate -d http://pastebin.com/e6AshtGq

ls -l /var/log http://pastebin.com/Y2A4Li59

cat /etc/logrotate.conf http://pastebin.com/1h7Uwctr

ls -l /etc/logrotate.d http://pastebin.com/NvUAeszM

Fabrik
источник
Есть ли у вас какие-либо ошибки? Убедитесь, что «include /etc/logrotate.d» не прокомментирован.
Ториан
1
Откуда вы знаете, что это не будет вращать ваши журналы? Ошибки? Не происходит через 30 дней? Эти ящики все время заняты? Планируется ли logrotate в cron?
EightBitTony
Я могу убедиться, что «include /etc/logrotate.d» присутствует в обеих системах. Никаких ошибок, кроме какой-нибудь интересной записи в системном журнале, например, ...rsyslogd was HUPed...не уверен, что это что-то значит.
Фабрика
@EightBitTony Это серверы, поэтому они постоянно работают. Настройки более или менее являются настройками по умолчанию (конфигурация logrotate не была изменена мной), установлены только обычные вещи. logrotate включен, cron.dailyно вращение не произойдет.
Фабрика
@Fabrik, пожалуйста, добавьте logrotate -d /etc/logrotate.conf к вопросу
EightBitTony

Ответы:

8

Проверьте, что ваш logrotate запускается cron.

Редактировать:

Из обсуждения комментариев - кажется, что cron работает неправильно. У меня был cronjob в моем crontab без пользователя, но это стало известно только после перезапуска демона cron

В моих системах Ubuntu и Centos есть /etc/cron.daily/logrotateфайл, содержимое которого

#!/bin/sh

test -x /usr/sbin/logrotate || exit 0
/usr/sbin/logrotate /etc/logrotate.conf

В моем / etc / crontab есть следующая строка для запуска ежедневных заданий

25 6    * * *   root    test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily 
иан
источник
Это похоже на мой конфиг, за исключением того, что мой
конфиг
Работает ли cron и проверяет вывод ps -ef | grep cron| grep -v grep? Добавьте эхо в начало /etc/cron.daily/logrotate echo "logrotate runing" >>/tmp/logrotate.outи посмотрите, будет ли оно создано.
user9517
Похоже, что-то пошло не так с моим crontab. cronзапущен, но не запускает ежедневное задание logrotate. Если я запускаю /etc/cron.daily/logrotateвручную, он вращает мои журналы, /tmp/logrotate.outтакже написано.
Фабрика
Не забывайте, что ежедневная работа не будет работать до завтра!
user9517
конечно, но вчера я изменил, /etc/cron.daily/logrotateпоэтому я добавил -fпараметр для принудительного вращения, но сегодня утром мои журналы не были повернуты.
Фабрика
10

У меня была похожая проблема, но crontabона работала и для некоторых каталогов журналов logrotateработала, а для некоторых - нет. Когда я попытался запустить logrotate вручную, я получил несколько сообщений об ошибках.

user@server:/var/log/apache2$ sudo /usr/sbin/logrotate -f /etc/logrotate.conf
error: error creating output file /var/log/apache2/access.log.1.gz: File exists
error: error creating output file /var/log/apache2/error.log.1.gz: File exists
...

Все *.1.gzфайлы имели размер 0. Я вручную удалил все файлы, упомянутые в сообщении об ошибке, sudo /usr/sbin/logrotate -f /etc/logrotate.confснова запустился и все заработало.

Я просто хотел поделиться этим альтернативным решением и здесь, так как это был первый результат поиска, который появился у меня, когда я искал проблему, но предложенное решение не сработало для меня. Может быть, это помогает и другим, которые находятся в той же ситуации, что и я.

Frog23
источник
спасибо, тоже была эта проблема Удалил все файлы 1.gz и он наконец-то возобновил работу. какой ужасный кусок кода.
Флориан Хейгл
2

Знаю, знаю. 5 летняя нить.

Подумал только, если это все равно будет достаточно высоко в поисках, я внесу свой вклад и дам свое решение проблемы, с которой столкнулся. Мои задания logrotate не обрабатывались автоматически ни на одном из моих серверов. Принудительное вращение работало нормально. Я нашел решение после того, как вручную выполнил команду ежедневного вращения:

( cd / && run-parts --report /etc/cron.daily )

Затем я увидел ошибку, которая остановила logrorate заданий от запуска:

/etc/cron.daily/logrotate:
error: iptraf-ng:2 duplicate log entry for /var/log/iptraf/*.log

Да, так просто. У меня было два файла, определяющих одни и те же логи для вращения (iptraf и iptraf-ng). Простое удаление одного из конфликтующих определений logrotate для iptraf добилось цели.

rm /etc/logrotate.d/iptraf

Другой проблемой может быть испорченный файл / etc / crontab. Значение двойной или тройной проверки синтаксиса в этом файле, так как он не дает никакого вывода, который я мог бы найти, если синтаксис неправильный. Тихо завершает работу после неудачной проверки синтаксиса.

Надеюсь, это сэкономит кому-то время.

ухмылка
источник
1

ОК, у меня была похожая проблема.

"журналы не вращаются?" но запускать logrotate вручную (или запускать /etc/cron.dailyи вращать их просто отлично.

Таким образом, кажется, что Cron просто «не работает» ежедневно. Странный. Поэтому я посмотрел в лог-файле, где cron выводит свои данные, и увидел, что «токен аутентификации больше не действителен; требуется новый» для исправления этой конкретной проблемы, см. Здесь

rogerdpack
источник
1

Я часто видел, как это происходит со временем, когда меняются сервисы, и параметры, используемые в logrotate, были отредактированы, что приводило к сбою logrotate каждый день.

Чтобы дать вам представление, последнее исправление включало параметр notifyempty в файле apache logrotate, который больше не действителен, что, в свою очередь, заставляло logrotate останавливаться все вместе.

Хотя это уже было рассмотрено, я хотел бы поделиться процессом, через который я прохожу при отслеживании этих проблем:

  1. начните с запуска, #/usr/sbin/logrotate -f /etc/logrotate.confчтобы найти ошибки (например, postfix: 3 'missingok')
    . Файл и номер строки, на которую он ссылается, это файл в папке logrotate.d.
  2. Отредактируйте рассматриваемый файл: # vi /etc/logrotate.d/postfixи удалите параметр, вызывающий проблему, и сохраните файл.
  3. Повторите первый шаг, чтобы увидеть, вращается ли работа или есть другие проблемы.

Есть моменты, когда первый шаг просто выводит что-либо, но вы знаете, что есть проблема. Поскольку все это началось из-за того, что файлы журнала для службы не вращались, вы можете наблюдать за процессом logrotate, который ищет конкретную службу, чтобы увидеть, что мешает ей вращаться. Для этого добавьте подробный тег в команду logrotate и посмотрите, что происходит в этой папке (если что-нибудь).

DBrown
источник
1

Проверьте конфликтующие параметры конфигурации logrotation !!

Я боролся с этим вопросом , и я , наконец , прочитать документацию по LogRotate очень внимательно, я нашел какую - то полезную документацию здесь .

Я указал и параметр Size, и параметр Rotation Interval , хотя на самом деле я не хотел ни того, ни другого. Я хотел, чтобы мои вращения происходили именно тогда, когда они были запланированы в cron.

  1. Параметр размера переопределит любой интервал вращения. Таким образом, мои журналы должны были превысить этот параметр прежде, чем они когда-либо будут повернуты. (Я вижу, как это было бы полезно, когда вы больше всего беспокоились об использовании диска. Но я не хотел его использовать.)
  2. Интервал вращения проверит, когда произошел последний поворот, и убедится, что следующий поворот задерживается на указанную величину. Но мне неясно, как вы контролируете, когда наступает это время, оно основано на последнем повороте.

Итак, избавьтесь от параметра Rotation Interval и Size . Тогда вы будете получать вращение каждый раз, когда вызывается logrotate без необходимости его форсировать.

РЕДАКТИРОВАТЬ : ОК, даже это не совсем работает! Если файл журнала ниже определенного порога, журналы не будут вращаться. Поэтому, когда я запускал задание cron, которое вращалось каждые 2 минуты, оно не вращало логи.

Вы можете увидеть подробную информацию отладки, если вы запустите logrotate -d. Это обеспечивает очень полезную информацию отладки.

BruceJo
источник