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:
# 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
# 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, undpidof
nichts zurückliefert.kill
bringt dann seine Hilfeseite.
Built on 2024-11-18