Question : Je souhaite faire pivoter automatiquement le apache access_log et error_log fichiers. Pouvez-vous expliquer avec un exemple comment procéder ?
Réponse : Ceci peut être réalisé en utilisant l'utilitaire logrotate comme expliqué ci-dessous.
Ajoutez le fichier suivant au répertoire /etc/logrotate.d.
# vi /etc/logrotate.d/apache /usr/local/apache2/logs/access_log /usr/local/apache2/logs/error_log { size 100M compress dateext maxage 30 postrotate /usr/bin/killall -HUP httpd ls -ltr /usr/local/apache2/logs | mail -s "$HOSTNAME: Apache restarted and log files rotated" [email protected] endscript }
Remarque : Reportez-vous à notre tutoriel de logrotate (avec 15 exemples) qui explique plus en détail comment utiliser les options de logrotate.
Dans l'exemple /etc/logrotate.d/apache ci-dessus :
- taille 100M - Une fois que le access_log et le error_log atteignent 100M, il sera tourné. Vous pouvez également utiliser 100k (pour Ko), 100G (pour Go). Au lieu de la taille, vous pouvez également faire pivoter les journaux apache en utilisant la fréquence (quotidienne, hebdomadaire, mensuelle).
- compresser – Indique que le fichier journal pivoté sera compressé. Par défaut, cela utilise gzip. Ainsi, le fichier pivoté aura l'extension .gz.
- textedate – Ajoute la date au format AAAAMMJJ aux fichiers journaux pivotés. c'est-à-dire qu'au lieu de access_log.1.gz, il crée access_log-20110616.gz
- maximum – Indique combien de temps les fichiers journaux pivotés doivent être conservés. Dans cet exemple, elles seront conservées pendant 30 jours.
- postrotation et endscript – Toutes les commandes comprises entre ces deux paramètres seront exécutées après la rotation du journal.
Important : Une fois que vous faites pivoter les fichiers journaux, vous voulez qu'Apache écrive les nouveaux messages de journal dans les fichiers access_log et error_log nouvellement créés. Donc, vous devez envoyer le signal HUP à apache comme indiqué ici. Assurez-vous de faire /usr/bin/killall -HUP httpd, qui redémarrera apache après la rotation des fichiers journaux (En savoir plus sur kill).
En outre, vous souhaiterez peut-être vous envoyer un e-mail indiquant que le fichier journal est pivoté, ainsi que la sortie de la commande ls -ltr dans le corps de l'e-mail. c'est-à-dire ajouter ce qui suit entre l'option "postrotate" et "endscript" (après la commande killall).
ls -ltr /usr/local/apache2/logs | mail -s "$HOSTNAME: Apache restarted and log files rotated" [email protected]
Le script /etc/cron.daily/logrotate s'exécute tous les jours et effectuera une rotation du journal de tous les fichiers comme spécifié dans le /etc/logrotate.conf et tous les fichiers sous le répertoire /etc/logrotate.d.
Après avoir ajouté le fichier /etc/logrotate.d/apache ci-dessus, à des fins de test, vous pouvez appeler manuellement le script logrotate comme indiqué ci-dessous.
# /etc/cron.daily/logrotate
Une fois les fichiers journaux pivotés, faites un ls pour les vérifier. Comme nous l'avons expliqué ci-dessus, les fichiers journaux en rotation seront conservés pendant 30 jours.
# ls /usr/local/apache2/logs access_log error_log access_log-20110716.gz error_log-20110716.gz