J'ai un démon écrit dans un fichier journal qui finit par remplir le disque. Existe-t-il un moyen pour moi de limiter périodiquement la taille du fichier journal sans arrêter le démon sans y changer le code? SIGHUP tue le démon.Est-il possible de rogner un fichier journal qu'un démon a ouvert sans que le démon ne ferme le fichier?
Répondre
L'astuce habituelle est:
echo -n > /var/log/name.log
qui travaillerait à condition que votre démon correctement ouvrez le fichier journal en mode append. La plupart d'entre eux le font. (Cette commande tronque simplement la taille du fichier à zéro et n'intervient pas avec un autre processus écrit dans le fichier en mode ajout.)
Une autre option consiste à vérifier si votre démon prend en charge syslog et à l'activer. La plupart des Linux sont maintenant livrés avec un collecteur de journaux qui automatiquement (en fonction des règles, etc.) archive les fichiers syslog.
Ainsi, si un fichier est ouvert en mode ajout et qu'un autre processus le tronque, le premier processus peut continuer à écrire dessus. Merci! – arturh
Le point du mode ajout est que l'opération d'écriture recherche atomiquement à la fin du fichier avant l'écriture réelle - et écrit à la fin du fichier. Si un processus tronquait le fichier, le démon ne remarquerait même pas qu'en raison du mode d'ajout, le système d'exploitation cherchera automatiquement à la fin du fichier, maintenant à l'offset 0. – Dummy00001
Si le nom de fichier est constant, vous pouvez essayer de créer un fifo à la place du fichier journal et le lire dans autant de fichiers journaux que vous le souhaitez.
Ceci est une bonne option, mais nécessite d'écrire plus de code pour gérer le fifo. Merci. – arturh
Pour découper le fichier journal, mais pour garder les 1000 dernières lignes de celui-ci:
echo "$(tail -1000 daemonlog)" > daemonlog
Qu'en est-logrotate (1)? – anselm