Logrotate

Wer seine Logrotate-Konfiguration testen möchte, verwendet:

logrotate --debug /etc/logrotate.d/syslog

Ansonsten wird Logrotate - ohne weiteres Zutun - einmal pro Nacht aktiv.

Die gebräuchlichsten Logrotate-Anweisungen sind:

compress
copytruncate
create 0600 root root
daily
dateext
endscript
missingok
nocreate
notifempty
postrotate
rotate 14
sharedscripts
size 30k
yearly

Alle Logrotate-Anweisungen in der Übersicht:

addextension ext
compress
compresscmd
compressext
compressoptions
copy
copytruncate
create mode owner group, create owner group
createolddir mode owner group
daily
dateext
dateformat format_string
datehourago
dateyesterday
delaycompress
extension ext
firstaction/endscript
hourly
ifempty
include file_or_directory
lastaction/endscript
mail address
mailfirst
maillast
maxage count
maxsize size
minage count
minsize size
missingok
monthly
nocompress
nocopy
nocopytruncate
nocreate
nocreateolddir
nodateext
nodelaycompress
nomail
nomissingok
noolddir
nosharedscripts
noshred
notifempty
olddir directory
postrotate/endscript
preremove/endscript
prerotate/endscript
renamecopy
rotate count
sharedscripts
shred
shredcycles count
size size
start count
su user group
tabooext [+] list
taboopat [+] list
uncompresscmd
weekly [weekday]
yearly

Best Practice - pro Tag eine Log-Datei, 14 Tage vorhalten, und für einfachen und schnellen Zugriff nicht komprimieren:

cat >/etc/logrotate.d/syslog <<EOF
/var/log/chrony/*
/var/log/cron
/var/log/maillog
/var/log/messages
/var/log/secure
/var/log/spooler
{
    # compress
    copytruncate
    daily
    dateext
    missingok
    rotate 14
}
EOF

Advanced Logrotating

Logdateien werden durch logrotate-Konfigurationsanweisungen rotiert, sollen aber in einem zweiten Schritt nachbearbeitet werden, OHNE die bestehenden Logrotate-Konfigurationsanweisungen zu ändern?

Im Beispiel sollen auf nach der Rotation neu angelegte Dateien ACLs gesetzt werden. Der erste Ansatz - ein Überschreiben der Anweisungen in einer nachgelagerten zweiten Konfigurationsdatei - funktioniert nicht, da Dateien über alle Konfigurationsdateien hinweg nur einmal vorkommen dürfen. Der Trick:

/etc/logrotate.d/linuxfabrik-setfacl.disabled
# This file has the .disabled extension to not be considered a logrotate config file.
# It contains file paterns and their ACL to be set as last action after a logrotate run.
# ACL       FILEPATH
g:mygroup:r /var/log/messages
g:mygroup:r /var/log/php-fpm/error.log
/etc/logrotate.d/z00-linuxfabrik
# Acts upon a nonsense logfile /var/tmp/linuxfabrik-rotate.me which is always rotated.
# This causes the prerotate for linuxfabrik-rotate.me to set ACLs as required.
/var/tmp/linuxfabrik-rotate.me {
    prerotate
        #set -x
        while read -r LINE; do
            if [ "${LINE:0:1}" != "#" ]; then
                if [ -n  "$(readlink -e ${LINE#* })" ]; then
                    /usr/bin/setfacl --modify $LINE
                fi
            fi
        done < /etc/logrotate.d/linuxfabrik-setfacl.disabled
    endscript

    sharedscripts
    size 0
    su root root

    postrotate
        rm -f /var/tmp/linuxfabrik-rotate.me*
        touch /var/tmp/linuxfabrik-rotate.me
    endscript
}

Troubleshooting

Cron meldet eine „kill-Usage“

Meldungen der Art

/etc/cron.daily/logrotate:

Usage:
 kill [options] <pid|name> [...]

Options:
 -a, --all              do not restrict the name-to-pid conversion to processes
                        with the same uid as the present process
 -s, --signal <sig>     send specified signal
 -q, --queue <sig>      use sigqueue(2) rather than kill(2)
 -p, --pid              print pids without signaling them
 -l, --list [=<signal>] list signal names, or convert one to a name
 -L, --table            list signal names and numbers

 -h, --help     display this help and exit
 -V, --version  output version information and exit

For more details see kill(1).
error: error running non-shared postrotate script for /var/log/gvm/gvmd.log of '/var/log/gvm/gvmd.log '

haben ihre Ursache möglicherweise in einer fehlerhaften Definition. Beispiel /etc/logrotate.d/gvmd - eine Prüfung ergibt: der enthaltene Befehl /bin/kill -HUP $(pidof gvmd) liefert einen Fehler, da der zu killende Prozess gar nicht lief, und pidof nichts zurückliefert. kill bringt dann seine Hilfeseite.

Built on 2024-02-28