logrotate dreht meine Protokolle nicht automatisch

8

Ich habe zwei verschiedene (i386 v AMD) Debian-Boxen und habe das gleiche Problem. logrotate dreht meine Protokolle nicht automatisch. Es funktioniert gut, wenn ich es manuell wie erzwinge

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

aber es ist nicht okay für mich.

Die Einstellungen wurden nicht geändert (zumindest habe ich sie nicht geändert). Die AMD-Box ist eine Neuinstallation, macht aber ihren Job nicht.

Wenn Sie ein ähnliches Problem bemerkt haben, helfen Sie mir bitte.

Update (einige Serverausgaben):

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
quelle
Haben Sie einen Fehler? Stellen Sie sicher, dass "include /etc/logrotate.d" nicht kommentiert ist.
Torian
1
Woher wissen Sie, dass Ihre Protokolle nicht gedreht werden? Fehler? Nicht nach 30 Tagen passiert? Sind diese Kisten die ganze Zeit geöffnet? Ist logrotate in cron geplant?
EightBitTony
Ich kann überprüfen, ob "include /etc/logrotate.d" in beiden Systemen vorhanden ist. Keine Fehler außer einigen interessanten Einträgen in Syslog, da ...rsyslogd was HUPed...nicht sicher , ob dies etwas bedeutet.
Fabrik
@EightBitTony Dies sind Server, damit sie kontinuierlich funktionieren. Einstellungen sind mehr oder weniger die Standardeinstellungen (logrotate config wurde von mir nicht geändert), nur die üblichen Sachen installiert. logrotate ist in enthalten, cron.dailyaber das Drehen wird nicht stattfinden.
Fabrik
@Fabrik bitte logrotate -d /etc/logrotate.conf Ausgabe zur Frage
hinzufügen

Antworten:

8

Überprüfen Sie, ob Ihr Logrotate von Cron ausgeführt wird.

Bearbeiten:

Aus der Kommentardiskussion geht hervor, dass cron nicht richtig funktioniert. Ich hatte einen Cronjob in meinem Crontab ohne Benutzer, aber dieser wurde erst sichtbar, als ich den Cron-Daemon neu startete

Meine Ubuntu- und Centos-Systeme haben eine /etc/cron.daily/logrotateDatei, deren Inhalt ist

#!/bin/sh

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

Mein / etc / crontab hat die folgende Zeile, um die täglichen Jobs auszuführen

25 6    * * *   root    test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily 
Iain
quelle
Das sieht total nach meiner Konfiguration aus, außer dass meine nicht funktioniert :(
fabrik
Läuft Cron ps -ef | grep cron| grep -v grep? Überprüfen Sie die Ausgabe von ? Fügen Sie am Anfang von /etc/cron.daily/logrotate ein Echo hinzu echo "logrotate runing" >>/tmp/logrotate.outund prüfen Sie, ob es erstellt wird.
user9517
Es sieht so aus, als ob mit meiner Crontab etwas schief gelaufen ist. cronist betriebsbereit, führt jedoch den täglichen Logrotate-Job nicht aus. Wenn ich /etc/cron.daily/logrotatemanuell starte, dreht es meine Protokolle, /tmp/logrotate.outauch geschrieben.
Fabrik
Vergessen Sie nicht, dass der tägliche Job erst morgen wieder ausgeführt wird!
user9517
Natürlich, aber gestern habe ich geändert, /etc/cron.daily/logrotatealso habe ich einen -fParameter hinzugefügt , um das Drehen zu erzwingen, aber heute Morgen wurden meine Protokolle nicht gedreht.
Fabrik
10

Ich hatte ein ähnliches Problem, crontabfunktionierte aber und für einige der Protokollverzeichnisse logrotatefunktionierte es, für einige jedoch nicht. Als ich versuchte, die Protokollierung manuell auszuführen, wurden einige Fehlermeldungen angezeigt.

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
...

Alle *.1.gzDateien hatten eine Größe von 0. Ich habe alle in der Fehlermeldung genannten Dateien manuell gelöscht, sudo /usr/sbin/logrotate -f /etc/logrotate.conferneut ausgeführt und es hat funktioniert.

Ich dachte nur, ich sollte diese alternative Lösung auch hier teilen, da dies das erste Suchergebnis war, das für mich auftauchte, als ich nach dem Problem suchte, aber die vorgeschlagene Lösung für mich nicht funktionierte. Vielleicht hilft das auch anderen, die sich in der gleichen Situation befinden wie ich.

Frosch23
quelle
Danke, hatte auch dieses Problem. Alle 1.gz-Dateien wurden gelöscht und es funktionierte schließlich wieder. Was für ein schrecklicher Code.
Florian Heigl
2

Ich weiß, ich weiß. 5 Jahre alter Thread.

Ich dachte nur, wenn es bei den Suchanfragen immer noch recht hoch ist, werde ich einen Beitrag leisten und meine Lösung für das Problem geben, auf das ich gestoßen bin. Meine Logrotate-Jobs wurden auf einem meiner Server nicht automatisch verarbeitet. Das Erzwingen der Rotation hat gut funktioniert. Nachdem ich den täglichen Rotationsbefehl von Hand ausgeführt hatte, kam ich auf eine Lösung:

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

Dann sah ich den Fehler, der das Auslösen von Logrorate-Jobs verhinderte:

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

Ja, so einfach ist das. Ich hatte zwei Dateien, die die gleichen Protokolle zum Drehen definierten (iptraf und iptraf-ng). Nur eine der widersprüchlichen Logrotate-Definitionen für iptraf zu entfernen, hat den Trick getan.

rm /etc/logrotate.d/iptraf

Ein weiteres Problem könnte eine verpfuschte / etc / crontab-Datei sein. Dies bedeutet, dass die Syntax dieser Datei doppelt oder dreifach überprüft wird, da sie keine Ausgabe liefert, die ich finden könnte, wenn die Syntax falsch ist. Wird nach fehlgeschlagener Syntaxüberprüfung leise beendet.

Hoffe das spart jemandem etwas Zeit.

Grinsen
quelle
1

OK, ich hatte ein ähnliches Problem.

"Protokolle werden nicht gedreht?" aber logrotate manuell ausführen (oder das ausführen /etc/cron.dailyund es dreht sie ganz gut.

Es scheint also, dass Cron einfach nicht "täglich läuft". Seltsam. Also habe ich in der Protokolldatei nachgesehen, in der cron seine Daten ausgibt, und festgestellt, dass "Authentifizierungstoken nicht mehr gültig ist; neues erforderlich", um dieses spezielle Problem zu beheben (siehe hier)

Rogerdpack
quelle
1

Ich habe gesehen, dass dies im Laufe der Zeit häufig vorkommt, wenn sich Dienste ändern und die in logrotate verwendeten Optionen überarbeitet wurden, was dazu führt, dass logrotate jeden Tag fehlschlägt.

Um Ihnen eine Vorstellung zu geben, bestand der letzte Fix darin, dass die Option notifyempty in der Apache-Logrotate-Datei nicht mehr gültig war, was wiederum dazu führte, dass Logrotate alle zusammen gestoppt wurden.

Obwohl dies bis zu einem gewissen Punkt behandelt wurde, möchte ich Ihnen den Prozess mitteilen, den ich beim Aufspüren dieser Probleme durchlaufe:

  1. Beginnen Sie mit der Ausführung #/usr/sbin/logrotate -f /etc/logrotate.conf, um nach Fehlern zu suchen (z. B. Postfix: 3 'missingok').
    Die Datei und die Zeilennummer, auf die sie sich beziehen, sind die Dateien im Ordner logrotate.d.
  2. Bearbeiten Sie die betreffende Datei: # vi /etc/logrotate.d/postfixund entfernen Sie die Option, die das Problem verursacht, und speichern Sie die Datei.
  3. Wiederholen Sie den ersten Schritt, um festzustellen, ob das Drehen funktioniert oder ob andere Probleme vorliegen.

Es gibt Zeiten, in denen der erste Schritt einfach etwas ausgibt, aber Sie wissen, dass es ein Problem gibt. Da diese ganze Sache gestartet wurde, weil die Protokolldateien für einen Dienst nicht gedreht wurden, können Sie den Protokollierungsprozess beobachten, der nach diesem bestimmten Dienst sucht, um zu sehen, was ihn daran hindert, sich zu drehen. Fügen Sie dazu das ausführliche Tag zu Ihrem Befehl logrotate hinzu und beobachten Sie, was in diesem Ordner passiert (falls vorhanden).

DBrown
quelle
1

Überprüfen Sie, ob die Konfigurationsparameter für die Protokollierung in Konflikt stehen.

Ich hatte mit diesem Problem zu kämpfen und habe endlich einige Dokumentationen zu logrotate sehr genau gelesen. Ich habe hier einige nützliche Dokumentationen gefunden .

Ich hatte sowohl einen Größenparameter als auch einen Rotationsintervallparameter angegeben, obwohl ich eigentlich keinen wollte. Ich wollte, dass meine Rotationen genau dann stattfinden, wenn sie in cron geplant waren.

  1. Der Größenparameter überschreibt jedes Rotationsintervall. Daher mussten meine Protokolle diesen Parameter überschreiten, bevor sie jemals gedreht wurden. (Ich kann sehen, wie nützlich dies wäre, wenn Sie sich am meisten Sorgen um die Festplattennutzung machten. Aber so wollte ich es nicht verwenden.)
  2. Das Rotationsintervall prüft, wann die letzte Rotation stattgefunden hat, und stellt sicher, dass die nächste Rotation um den angegebenen Betrag verzögert ist. Ich bin mir jedoch nicht sicher, wie Sie steuern, wann diese Zeit eintritt. Sie basiert auf dem letzten Mal, als eine Drehung stattgefunden hat.

So erhalten Sie das rid Rotationsintervall und Größe Parameter. Dann erhalten Sie jedes Mal eine Rotation, wenn logrotate aufgerufen wird, ohne dass Sie dies erzwingen müssen.

EDIT : OK, auch das funktioniert nicht ganz! Wenn die Protokolldatei unter einem bestimmten Schwellenwert liegt, werden die Protokolle nicht gedreht. Wenn ich also einen Cron-Job ausführte, der alle 2 Minuten gedreht wurde, wurden die Protokolle nicht gedreht.

Sie können detaillierte Debug-Informationen anzeigen, wenn Sie ausführen logrotate -d. Dies bietet einige sehr nützliche Debug-Informationen.

BruceJo
quelle