web-dev-qa-db-fra.com

rsyslog ne tourne pas à taille de fichier fixe

J'essaie de créer un fichier journal séparé pour une application sous Linux. Jusqu'à présent, j'ai créé un script .conf pour séparer le journal dans un fichier journal personnalisé en fonction du nom du programme et cela fonctionne correctement.

Mais, je veux limiter la taille du fichier journal à 10K et j'utilise $outchannel à cette fin. Le script est stocké sous le nom /etc/rsyslog.d/00-abc_log.conf:

$outchannel o_abc, /var/log/abc.log, 10240, /home/xyz/logrot
if $programname == 'abc' then :omfile:$o_abc

et le script /home/xyz/logrot contient les éléments suivants:

mv -f /var/log/abc.log /var/log/abc.log.1

Au-dessous de la limite de 10 Ko, la journalisation fonctionne correctement, mais lorsque le journal dépasse la limite de taille de 10 Ko, le fichier abc.log.1 n'est pas généré et la journalisation dans abc.log s'arrête.

Si cela compte, mon système est Xubuntu 12.04 sous rsyslog-5.8.6.

Merci d'avance.

3

Votre problème se produit car le descripteur de fichier est toujours ouvert dans l'application après l'avoir déplacé sur le système de fichiers. Sauf si vous pouvez indiquer au programme de redémarrer la journalisation directement après le déplacement (généralement pour les démons, il existe un signal correspondant, tel que SIGHUP), vous devrez utiliser une autre méthode de rotation que le déplacement des fichiers dans lesquels ils sont écrits. temps

Je suggère d'utiliser logrotate comme suit. Je ne l'ai pas testé, car vous n'avez pas partagé l'application impliquée.

Créez votre propre fichier de configuration logrotate, par exemple. abclogrotate.conf:

/var/log/abc.log {
    # don't use time based rotation, but size-based
    size 10k
    # don't move, but copy-and-truncate so the application won't have to be
    # told that the file has moved.
    copytruncate
    # maximum of one old file
    rotate 1
    # counting old files starts at 1 rather than 0
    start 1
    # don't use compression
    nocompress
}

Appelez maintenant logrotate comme ceci: logrotate /path/to/abclogrotate.conf plutôt que votre propre script.

2
gertvdijk