web-dev-qa-db-fra.com

But de "postrotate invoke-rc.d rsyslog en rotation" lors de la rotation, et cette commande est-elle obsolète?

En utilisant logrotate pour faire tourner les fichiers journaux en rotation, j'ai vu

postrotate
                invoke-rc.d rsyslog rotate > /dev/null
endscript

Je sais que postrotate fait exécuter à bash la commande suivante après la rotation du fichier journal, mais quel est le but de l'exécution de cette commande?

Enfin, est-ce maintenant obsolète? (Il semble que je vois un message de anacron disant "Le script que vous essayez d'appeler a été converti en travail Upstart, mais la rotation n'est pas prise en charge pour les travaux Upstart.")

3
fpghost

J'ai eu un problème similaire, et il semble que la configuration de rsyslog pour logrotate soit cassée. Ainsi, au lieu d'appeler service rsyslog rotate qui fonctionne réellement, il utilise reload rsyslog ou similaire. Il s’avère que c’était en fait un bogue , qui a été corrigé dans la version 7.4.4-1ubuntu5 , mais mon installation d’Ubuntu 14.04 ne voit que la version 7.4.4 -1ubuntu2 dans apt.

C'est le correctif qui a fonctionné pour moi:

Editez le fichier /etc/logrotate.d/rsyslog en remplaçant la ligne à l'intérieur du bloc postrotate (par exemple reload rsyslog ou invoke-rc.d rsyslog rotate) par ceci:

service rsyslog rotate >/dev/null 2>&1 || true

Voici à quoi devrait ressembler le bloc:

postrotate
    service rsyslog rotate >/dev/null 2>&1 || true
endscript

Avec toutes les lignes environnantes conservées telles quelles.

Enfin, il peut être judicieux d’exécuter la commande manuellement une fois:

service rsyslog rotate
5

Le but de la commande est de forcer rsyslog à rouvrir les fichiers qu’il utilise pour écrire des journaux. Il est utilisé après que logrotate a déplacé les anciens fichiers, donc rsyslog commence à écrire dans les nouveaux.

Exemple: rsyslog écrit la plupart de ses éléments dans/var/log/syslog. Lorsque logrotate démarre, il déplace ce fichier vers /var/log/syslog.1 et crée un nouveau fichier/var/log/syslog vide. Mais comme vous le savez probablement (mais au cas où), rsyslog n'écrit pas dans un fichier nommé/var/log/syslog, mais dans un descripteur de fichier, il l'a obtenu la première fois qu'il a ouvert le fichier. Vous pouvez vous déplacer dans le fichier associé et rsyslog continuerait à écrire dessus, car il ne connaît que le descripteur de fichier. Lorsque vous déplacez/var/log/syslog vers /var/log/syslog.1, rsyslog écrit continuellement dans /var/log/syslog.1, car c’est le but de son descripteur de fichier. En fait, vous pouvez même supprimer le fichier et rsyslog continuerait à écrire. C'est ce qui se produit lorsque les fichiers supprimés semblent occuper de l'espace: les descripteurs de fichier sont toujours ouverts et, par conséquent, l'espace n'est pas libéré. Cela ne se produit que lorsque la dernière référence au fichier est fermée.

L'argument "rotate" est destiné à forcer la publication d'anciens descripteurs de fichier et à indiquer à rsyslog qu'il doit rouvrir les fichiers pour que les nouveaux descripteurs soient transférés dans les nouveaux fichiers et que les anciens puissent être éliminés correctement.

Quant à ce qui est obsolète, j'ai bien peur de ne pas savoir. C'est ce qui m'a amené à votre question O :-) Mais je pense que le problème est que la configuration suivante n'est pas prête à accepter cette option. Je l'ai remplacé par ceci, à partir de la page de manuel:

kill -HUP $(cat /var/run/rsyslogd.pid)

Quel est ce que "rotation" a fait, de toute façon. J'espère que ça t'as aidé.

5
rsuarez