Apache2 und logrotate: delaycompress benötigt?

8

Ich betrachte derzeit die Dateigröße meiner Apache-Protokolle, als sie riesig wurden. In meiner Logrotate-Konfiguration habe ich delaycompressaktiviert. Benötigt Apache dies wirklich (da in der Logrotate-Dokumentation angegeben ist, dass einige Programme noch in die alte Datei schreiben) oder ist das Deaktivieren sicher delaycompress?

Hier ist meine Logrotate-Konfiguration:

/var/log/apache2/*.log {
    weekly
    missingok
    rotate 26 
    compress
    delaycompress
    notifempty
    create 640 root adm
    sharedscripts
    postrotate
            if [ -f /var/run/apache2.pid ]; then
                    /etc/init.d/apache2 restart > /dev/null
            fi
    endscript
}
j0nes
quelle

Antworten:

7

Wenn Sie einen Apache-Neustart durchführen (oder sogar "elegant"), werden geöffnete Dateihandles geschlossen und erneut geöffnet. Sie sollten delaycompress nicht benötigen, da die Datei im Rahmen Ihres Neustarts nach dem Drehen geschlossen und erneut geöffnet wurde.

rotate access_log -> access_log.1 (rename action, no INODE change)
apache still writing to access_log.1 (same open FD on same INODE)
apache restart (close FD, release INODE writing)
apache writing to access_log (new FD to a new INODE)

Ein Neustart ist eine schlechte Idee - was ist, wenn sich die Konfigurationsdatei versehentlich geändert hat und nicht mehr gültig ist? Ihr Apache startet nicht wieder. Senden Sie stattdessen ein HUP an den übergeordneten Prozess, der ihn anweist, Dateihandles zu schließen / erneut zu öffnen.

postrotate
  /bin/kill -HUP `cat /var/run/apache2.pid 2>/dev/null` 2>/dev/null || true
endscript

cat schlägt fehl, wenn die PID fehlt (oder leer oder ungültig ist), wodurch auch kill fehlschlägt, sodass Sie den if..thenBlock um sie herum nicht benötigen .

Martijn Heemels
quelle
YMMV, aber ich finde das eine nette Antwort
asdmin
0

Hrm, in diesem Fall wahrscheinlich, da Apache die Protokolle offen hält.

Eine Sache, die Sie versuchen können, ist das rotatelogsSkript. Es ist Teil des apache2-utilsPakets, zumindest hier auf meiner Ubuntu-Workstation. Ein anderer Ansatz wäre, sie täglich statt wöchentlich zu drehen, damit Sie vor der Komprimierung weniger puffern.

McJeff
quelle
Wahrscheinlich hätte ich meine logrotate-Konfiguration in der obigen Frage hinzufügen sollen - als postrotate habe ich einen Neustart von apache2 eingerichtet.
j0nes