Généralités
Logrotate est exécuté tous les jour via le timer de systemd configuré dans le fichier /usr/lib/systemd/system/logrotate.timer
Tests
|
# test la configuration du fichier /etc/logrotate.d/nginx
logrotate -d /etc/logrotate.d/nginx
# -d → debug: aucune modification n'est faite
# -f → force: force la rotation
# vérifier quels log ont été archivés
cat /var/lib/logrotate.status
|
/etc/logrotate.conf
|
# fréquence de rotation: daily, monthly, weekly
weekly
# nombre d'archives conservées avant la suppression (file.log.1.gz)
rotate 4
# effectuer une rotation lorsque le fichier atteint la taille définie (M pour megabytes, k pour kilobytes)
# size remplace la fréquence de rotation
size 10M
# effectuer une rotation lorsque le fichier atteint la taille définie ET que la la fréquence de rotation est écoulée
minsize 10M
# ne pas effectuer la rotation si le fichier est vide
notifempty
# create un fichier de log vide après la rotation
create
# il est possible de spécifier les droits, le user et le group du nouveau fichier
create xxx user group
# par défaut, même mode, user et group que le fichier précédent
# zipper le fichier de log avant la rotation
compress
# zipper le fichier de log lors de la prochaine rotation. Fonctionne seulement si l'option « compress » est activée.
# Utile si l'application ne peut fermer immédiatement son accès au fichier de log et continue à écrire dedans.
delaycompress
# déplacer les fichiers dans un autre répertoire après la rotation
olddir /var/log/archive
# liste des fichiers à ignorer, par défaut: .rpmorig, .rpmsave, .swp, .rpmnew, ~
# l'utilisation de « + » permet d'ajouter de nouveaux fichiers à ignorer, sinon la liste est écrasée
tabooext + .pacorig .pacnew .pacsave
/var/log/dossier/*log {
# si le fichier de log n'existe pas, ne pas générer d'erreurs
missingok
# n’exécuter qu'une seule fois prescript et postscript pour tous les fichiers correspondant au pattern
sharedscripts
# par défaut prescript et postscript sont exécutés pour chaque fichier de log correspondant au pattern
# code exécuté avant la rotation
prerotate
code
endscript
# code exécuté après la rotation
postrotate
code
endscript
}
|
nginx
/etc/logrotate.d/nginx
|
/var/log/nginx/*log {
size 5M
rotate 2
missingok
sharedscripts
compress
postrotate
test ! -r /var/run/nginx.pid || kill -USR1 `cat /var/run/nginx.pid`
endscript
}
|
Le fichier /var/run/nginx.pid contient l'id du processus nginx en cours d’exécution.
kill -USR1 envoie un signal à nginx pour qu'il recharge ses fichiers de log.
php-fpm
|
PHP 7.0: php-fpm does no longer provide a logrotate configuration. Instead syslog/journald is used by default |
/etc/logrotate.d/php-fpm
|
/var/log/php-fpm.log {
missingok
notifempty
compress
delaycompress
rotate 1
weekly
postrotate
/bin/kill -SIGUSR1 `cat /run/php-fpm/php-fpm.pid 2>/dev/null` 2>/dev/null || true
endscript
}
|
Erreurs
error: failed to rename ... to (null): Permission denied
Le dossier /var/log/xxx doit avoir les droits http:log 750.
Examples
/etc/logrotate.d/apache2
|
/var/log/apache2/*.log {
daily
missingok
rotate 14
compress
delaycompress
notifempty
create 640 root adm
sharedscripts
prerotate
if [ -d /etc/logrotate.d/httpd-prerotate ]; then
run-parts /etc/logrotate.d/httpd-prerotate
fi
endscript
postrotate
if pgrep -f ^/usr/sbin/apache2 > /dev/null; then
invoke-rc.d apache2 reload 2>&1 | logger -t apache2.logrotate
fi
endscript
}
|
/etc/logrotate.d/nginx
|
/var/log/nginx/*.log {
daily
missingok
rotate 14
compress
delaycompress
notifempty
create 0640 www-data adm
sharedscripts
prerotate
if [ -d /etc/logrotate.d/httpd-prerotate ]; then \
run-parts /etc/logrotate.d/httpd-prerotate; \
fi \
endscript
postrotate
invoke-rc.d nginx rotate >/dev/null 2>&1
endscript
}
|