it-swarm.com.de

logrotate dreht die Protokolle nicht

Ich habe diese Logrotate-Konfiguration und laufe unter 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 eingefügt und heute wurde das Protokoll nicht gedreht.

Unten sind die Dinge, die ich getan habe:

  1. Ich habe überprüft, ob sich das Protokoll tatsächlich in /var/log/mysql/mysql-slow.log befindet
  2. mysqladmin-Zeilen funktionieren einwandfrei, wenn sie als root ausgeführt werden
  3. mysql kann in das 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 anzeigt, dass logrotate erfolgreich war? Ich möchte sehen, ob irgendetwas darauf hindeutet, dass ein Problem aufgetreten ist.
  2. Irgendwelche Ideen, warum das Logrotate nicht funktioniert?
25
Carmen

Ein häufiges Problem ist, dass beim ersten Einrichten eines täglichen logrotate.d-Eintrags dieser am ersten Tag nicht gedreht wird. Wenn Sie eine zeitbasierte Rotation (täglich/wöchentlich/monatlich) verwenden, kritzelt logrotate einen Datumsstempel des letzten Datums, an dem die Datei in /var/lib/logrotate/status (oder /var/lib/logrotate.status auf RHEL-Systemen).

Das gekritzelte Datum wird zum Referenzdatum für zukünftige Läufe von logrotate, mit denen 'tägliche' Rotationen verglichen werden. Da der Standard-Cron-Job täglich ausgeführt wird, ist dies normalerweise nur bei täglichen Jobs ein Problem.

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 und die Protokolle gedreht

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

Nach folgendem Slicehost-Artikel:

Logrotate unter Ubuntu verstehen - Teil 2
http://articles.slicehost.com/2010/6/30/understanding-logrotate-on-ubuntu-part-2

... das /var/lib/logrotate/status file " speichert Informationen darüber, wann jede Protokolldatei zuletzt gedreht wurde.". Die logrotate manpage sagt, dass dies eine "Statusdatei" genannt wird.

Hier in ServerFault gibt es eine weitere Diskussion, die ebenfalls nützlich sein kann:

Wie geht logrotate genau mit "täglich" um?

In dieser Diskussion sagt "MadHatter" Folgendes in Bezug auf die "Status" -Datei (Statusdatei):

"Jede Datei hat eine Zeile. Dies ist das Datum, an dem sie zuletzt gedreht wurde. Wenn Sie logrotate an einem solchen Datum ausführen, an dem eine bestimmte Datei gedreht werden muss, 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.

5
ricmarques

Wenn für mysqladmin ein Benutzer oder ein Kennwort erforderlich ist, wird es nicht ohne Änderung aus der Konfiguration /root/.my.cnf Gelesen.

Versuchen Sie, Ihre Ausgabe an den Logger weiterzuleiten, 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 nach dem Drehen keinen Fehler in einer neuen Datei?

0
KCD