Sur un VPS Linux, les journaux système et applicatifs servent à diagnostiquer une erreur. Les logs d’un serveur web Nginx ou Apache, de PHP-FPM, SSH, cron, Postfix, d’un firewall ou d’une base de données peuvent pourtant remplir le disque. logrotate automatise la rotation, la compression et la rétention des fichiers de configuration de logs. Ce tutoriel explique une méthode vérifiable en terminal, adaptée à Ubuntu et aux distributions Unix.
Fonctionnement de logrotate
La rotation renomme le fichier actif, crée un nouveau fichier et conserve des archives. daily, weekly ou monthly choisit la fréquence. rotate fixe le nombre de versions, compress réduit leur taille et dateext ajoute une date. Une rotation locale n’est pas un backup, une sauvegarde hors site ou une politique de restauration.
La configuration globale est généralement dans /etc/logrotate.conf et les règles de paquets dans /etc/logrotate.d/. Un paquet Nginx, Apache ou Postfix peut déjà fournir une règle. Contrôlez l’existant avant d’ajouter un fichier. Pour distinguer journald et fichiers applicatifs, consultez notre guide journalctl.
Vérifier l’installation
cat /etc/os-release
command -v logrotate
logrotate --version
sudo less /etc/logrotate.conf
sudo find /etc/logrotate.d -maxdepth 1 -type f -print
sudo du -sh /var/log/* 2>/dev/null
/etc/os-release identifie Ubuntu ou une autre distribution. command -v vérifie le paquet et le chemin du binaire. du repère les fichiers volumineux. Si l’espace paraît libre mais qu’un fichier ne peut plus être créé, contrôlez les inodes avec une procédure dédiée.
Créer une règle de rotation
Créez une règle par service dans le terminal. Remplacez le chemin fictif par le fichier réellement écrit par votre application.
sudo install -m 0644 /dev/null /etc/logrotate.d/mon-service
sudo nano /etc/logrotate.d/mon-service
/var/log/mon-service/serveur.log {
daily
rotate 14
missingok
notifempty
dateext
compress
delaycompress
copytruncate
}
missingok ignore un fichier absent, notifempty évite une archive vide et delaycompress attend la rotation suivante avant de compresser la version récente. Une directive size complète parfois la fréquence pour un serveur web très actif. Une rétention mesurée est préférable à un stockage illimité.
Permissions et fichier recréé
Après la rotation, le daemon doit écrire dans le nouveau fichier. Contrôlez le propriétaire, le groupe, le mode et les répertoires parents :
stat /var/log/mon-service/serveur.log
namei -l /var/log/mon-service/serveur.log
La directive create définit les droits du fichier recréé. Ne donnez pas des permissions excessives pour masquer une erreur d’utilisateur ou de groupe. Vérifiez le compte root, le compte du service et les règles de sécurité. Mesurez aussi l’espace avec le guide de surveillance d’un VPS Linux.
Copytruncate ou reload
copytruncate convient à un programme qui ne sait pas rouvrir un log. Une écriture concurrente peut cependant se produire pendant la copie. Nginx et Apache proposent habituellement un rechargement, mais le nom exact de l’unité et la commande doivent être vérifiés.
/var/log/mon-service/serveur.log {
daily
rotate 14
missingok
notifempty
dateext
compress
delaycompress
postrotate
systemctl reload mon-service.service >/dev/null 2>&1 || true
endscript
}
postrotate lance une commande après la rotation. prerotate prépare une opération et sharedscripts évite plusieurs rechargements pour une même règle. Ne remplacez pas reload par restart sans connaître l’impact sur le serveur. Gardez une session SSH de secours en suivant la procédure de clé SSH.
Exemples de chemins et de configuration
Un serveur web peut écrire un access log et un error log dans des répertoires distincts. Une application PHP peut déléguer ses erreurs à PHP-FPM. Un service mail ou une base de données possède aussi ses propres fichiers. N’inventez pas le chemin : lisez la configuration du paquet et utilisez ls, stat et les journaux du service. Un fichier de configuration indique souvent le chemin, le niveau de log et le compte d’exécution.
sudo systemctl status nginx --no-pager
sudo systemctl status apache2 --no-pager
sudo journalctl -u nginx --since today
sudo journalctl -u apache2 --since today
Pour un service de jeu, la même démarche s’applique aux logs de l’application. Une erreur de permissions n’est pas résolue par un redémarrage aveugle : identifiez d’abord l’utilisateur, le groupe et le répertoire.
Tester en debug
Le mode debug simule la rotation sans modifier les fichiers. Le mode verbose détaille les opérations et la règle chargée.
sudo logrotate -d /etc/logrotate.d/mon-service
sudo logrotate -v -d /etc/logrotate.d/mon-service
Après vérification, testez la rotation forcée pendant une fenêtre d’administration :
sudo logrotate -v -f /etc/logrotate.d/mon-service
ls -lah /var/log/mon-service/
stat /var/log/mon-service/serveur.log
Contrôlez la taille, les archives .gz, les dates, les droits et l’écriture du service. La base d’état de logrotate mémorise la dernière rotation. Ne la supprimez pas sans raison.
Cron et systemd
Le déclenchement utilise cron, anacron ou un minuteur systemd selon la distribution. Cherchez le mécanisme actif et son dernier résultat.
systemctl list-timers --all | grep -i logrotate
systemctl status logrotate.timer --no-pager
sudo journalctl -u logrotate.service --since today
sudo grep -R "logrotate" /etc/cron.* /etc/anacrontab 2>/dev/null
Une unité systemd absente n’est pas une panne si cron est le mécanisme normal. Si la rotation échoue, examinez le fichier de configuration, le paquet, le chemin et les permissions. Consultez aussi le diagnostic des inodes.
Erreurs fréquentes
- cibler un fichier différent de celui écrit par le serveur web ;
- dupliquer une règle installée par un paquet ;
- oublier le propriétaire après
create; - forcer une rotation avant le mode debug ;
- confondre journald et un fichier applicatif ;
- prendre la compression pour une sauvegarde ;
- redémarrer le serveur pour corriger une erreur de configuration.
Avant une modification, conservez une copie de la configuration et une procédure de retour arrière. Consultez le guide de mise à jour d’un serveur Linux.
Checklist
- Identifier distribution, paquet, service et chemin.
- Mesurer espace et inodes.
- Créer une seule règle.
- Définir fréquence, rétention, compression et droits.
- Choisir
copytruncateoupostrotate. - Tester avec
-d, puis vérifier les archives. - Contrôler cron ou systemd et l’écriture du service.
Un VPS Linux pour votre service
Un VPS adapté facilite l’administration d’un serveur web, d’une application ou d’un serveur de jeu. Découvrez les VPS Linux ElypseCloud.
Découvrir les VPS LinuxSource technique à vérifier par le relecteur : page de manuel logrotate de Debian et documentation de la distribution installée. Les directives et commandes doivent être contrôlées sur la version réellement utilisée.