Frage logrotate rotiert die Protokolle nicht


Ich habe diese logrotate Konfiguration und ich laufe auf Ubuntu 10.04.

/var/log/mysql/mysql-slow.log {
    daily
    rotate 3
    compress
    notifempty
    missingok
    create 660 mysql adm
    postrotate 
    if test -x /usr/bin/mysqladmin && \
       /usr/bin/mysqladmin  ping &>/dev/null
    then
       /usr/bin/mysqladmin  flush-logs
    fi
endscript

}

Ich habe dies gestern in /etc/logrotate.d gestellt und heute wurde das Log nicht rotiert.

Unten sind die Dinge, die ich getan habe:

  1. Ich habe überprüft, dass das Protokoll tatsächlich in /var/log/mysql/mysql-slow.log ist
  2. mysqladmin-Zeilen funktionieren gut, wenn sie als root ausgeführt werden
  3. mysql kann in die mysql-slow.log schreiben

Als ich das tat:

$ logrotate -d -f mysql-slow

reading config file mysql-slow
reading config info for /var/log/mysql/mysql-slow.log 

Handling 1 logs

rotating pattern: /var/log/mysql/mysql-slow.log  forced from command line (3 rotations)
empty log files are not rotated, old logs are removed
considering log /var/log/mysql/mysql-slow.log

log needs rotating
rotating log /var/log/mysql/mysql-slow.log, log->rotateCount is 3
dateext suffix '-20120329'
glob pattern '-[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]'
renaming /var/log/mysql/mysql-slow.log.3.gz to /var/log/mysql/mysql-slow.log.4.gz     (rotatecount 3, logstart 1, i 3), 
renaming /var/log/mysql/mysql-slow.log.2.gz to /var/log/mysql/mysql-slow.log.3.gz (rotatecount 3, logstart 1, i 2), 
renaming /var/log/mysql/mysql-slow.log.1.gz to /var/log/mysql/mysql-slow.log.2.gz (rotatecount 3, logstart 1, i 1), 
renaming /var/log/mysql/mysql-slow.log.0.gz to /var/log/mysql/mysql-slow.log.1.gz (rotatecount 3, logstart 1, i 0), 
renaming /var/log/mysql/mysql-slow.log to /var/log/mysql/mysql-slow.log.1
creating new /var/log/mysql/mysql-slow.log mode = 0660 uid = 20004 gid = 4
running postrotate script
running script (multiple) with arg /var/log/mysql/mysql-slow.log : " 
    if test -x /usr/bin/mysqladmin && \
       /usr/bin/mysqladmin &>/dev/null
    then
       /usr/bin/mysqladmin flush-logs
    fi
"
compressing log with: /bin/gzip
removing old log /var/log/mysql/mysql-slow.log.4.gz
  1. Wo ist das Protokoll, das zeigt, dass Logrotate erfolgreich war? Ich möchte sehen, ob es irgendetwas gibt, das sagen würde, dass es ein Problem gab.
  2. Irgendwelche Ideen, warum das Logrotate nicht funktioniert?

19
2018-03-29 19:43


Ursprung


So funktioniert es, wenn es von Hand ausgeführt wird? Ist crond Laufen? - Kyle Smith
Ja, es funktioniert, wenn Sie logrotate -f mysql_slow_query meinen. Und Crond läuft. - Carmen
Sind Sie sicher, dass noch keine andere Konfiguration vorhanden ist, die diese Protokolldatei verarbeiten soll? Vielleicht mysql-server? Lauf grep '/var/log/mysql' /etc/logrotate.d/*. - Zoredache
Ich habe diesen Befehl ausgeführt und nur meine Konfiguration zeigt etwas in / var / log / mysql - Carmen
Zu welcher Tageszeit laufen die täglichen Cron-Jobs in Ihrem Ubuntu-Setup? Möglicherweise finden Sie diese Informationen in der /etc/crontab Datei, in der Zeile, die mit endet /etc/cron.daily ). Vielleicht haben Sie die logrotate-Konfiguration erstellt, nachdem die täglichen Cron-Jobs für diesen Tag bereits ausgeführt wurden? - ricmarques


Antworten:


Ein häufiges Problem ist, wenn Sie einen täglichen Eintrag logrotate.d einrichten, wird es nicht am ersten Tag rotieren. Wenn Sie eine zeitbasierte Rotation (täglich / wöchentlich / monatlich) verwenden, scrollt logrotate einen Datumsstempel des letzten Datums, an dem die Datei angezeigt wurde /var/lib/logrotate/status (oder /var/lib/logrotate.status auf RHEL-Systemen).

Das kritzelte Datum wird zum Referenzdatum aus diesen zukünftigen Läufen von logrotate wird verwendet, um "tägliche" Rotationen zu vergleichen. Da der Standardcron-Job täglich ausgeführt wird, ist dies normalerweise nur ein Problem bei täglichen Jobs.

Sie können dieses Problem auf zwei Arten vermeiden;

  1. Lauf sudo logrotate -f /etc/logrotate.d/<my rotate job>

    • Dadurch wird das Datum in die Statusdatei geschrieben, ohne die Protokolle zu rotieren

  2. Bearbeiten /var/lib/logrotate/status und füge die Zeile manuell hinzu:

    "/var/log/my_special.log" 2013-4-8

    • Setzen Sie es auf das heutige oder ein vorheriges Datum. Der nächste Lauf sollte dazu führen, dass es ausgeführt wird.

39
2018-04-09 15:29



Funktioniert wie ein Champion! - Seth
Eigentlich ist es tut rotieren Sie die Protokolle bei der Verwendung -f (zumindest auf meinem RH-Derivat). - bufh
-f für Force Rotation, -d Für Debug bedeutet auch Debugging einen Trockenlauf, so dass währenddessen keine Änderungen vorgenommen werden -d ist eingeschaltet. - ThorSummoner


Laut dem folgenden Slicehost-Artikel:

Verständnis von Logrotate auf Ubuntu - Teil 2
http://articles.slicehost.com/2010/6/30/understanding-logrotate-on-ubuntu-part-2 

... das /var/lib/logrotate/status Datei "speichert Informationen darüber, wann jede Protokolldatei zuletzt gedreht wurde.". Das logrotate manpage sagt, dass das eine "Zustandsdatei" heißt.

Es gibt eine weitere Diskussion hier in ServerFault, die auch nützlich sein kann:

Wie behandelt logrotate "täglich" genau?

In dieser Diskussion sagt "MadHatter" Folgendes bezüglich der "status" (state) Datei:

"Jede Datei hat eine Zeile, das ist das Datum, an dem sie zuletzt gedreht wurde. Wenn Sie logrotate an einem solchen Datum ausführen, dass eine bestimmte Datei zur Rotation fällig ist, wird die Anzahl der Tage zwischen dem aktuellen Datum und dem Datum in der Datei angegeben ( 1 für täglich, 7 für wöchentlich usw.), wird die Datei gedreht. "

Ich hoffe das hilft.


4
2018-03-30 21:35





Ob mysqladmin benötigt einen Benutzer oder ein Passwort, von dem es nicht gelesen werden kann /root/.my.cnf Konfiguration ohne Änderung.

Versuchen Sie, Ihre Ausgabe an den Logger zu leiten, um zu sehen, was passiert.

  postrotate
      # just if mysqld is really running
      if test -x /usr/bin/mysqladmin && \
         /usr/bin/mysqladmin ping &>/dev/null
      then
         env HOME=/root/ /usr/bin/mysqladmin flush-logs 2>&1 | logger
      else
         logger "mysqladmin ping failed so not rotating mysql logs"
      fi
  endscript

MySQL protokolliert den Fehler nach dem Drehen nicht in der neuen Datei?


0
2017-08-13 03:31