J'ai un script simple qui génère un tas de journaux à filtrer et j'ai canalisé le STDOUT dans un fichier pour stocker les journaux. Étant donné que ce script s'exécute depuis longtemps, j'avais besoin de faire pivoter les fichiers journaux afin qu'ils soient regroupés dans des fichiers plus petits et plus faciles à gérer.
Le problème que j'ai rencontré était qu'une fois que le logrotate
fichier journal actuel est déplacé dans un nouveau, le fichier journal nouvellement créé n'est plus rempli avec les journaux. Il semble qu'une fois le fichier journal d'origine supprimé, son gestionnaire de fichiers est perdu et la redirection ne fonctionnera plus.
J'ai également trouvé ce message qui avait le même problème que moi et prétend qu'il peut être résolu en utilisant >>
au lieu de >
rediriger la sortie. J'ai testé sa solution mais cela n'a pas fonctionné pour moi. Quelqu'un a-t-il une idée de la façon de continuer à travailler la redirection?
Réponses:
Vous devez utiliser la directive copytruncate dans votre configuration logrotate pour ce fichier journal.
la source
compress
opération, les données sont dupliquées. Cela nous a causé un problème une fois, mais c'était notre pire, car nous n'aurions pas dû être aussi près de lalv
limite d'espace. En outre, comme indiqué dans l'man
extrait de code, vous risquez de perdre certaines données de journal entre les opérations de copie et de troncature.Comme alternative, vous pouvez également:
utilisez l'utilitaire de journalisation dans votre script au lieu de la tuyauterie, avec une fonction dédiée (par exemple local5), par exemple:
logger -p local5.info -t myscriptname "this is some log data"
configurez syslog pour écrire cette fonction dans le fichier journal voulu, exemple (rsyslog.conf):
local5.* /var/log/mylogfile
configurez la règle logrotate pour ce journal.
la source
echo
. La sortie des outils tiers qui sont appelés à partir du script et qui produisent également quelque chose ne peut pas être redirigée vers l'enregistreur de cette façonUne autre alternative à la solution Iain est d'utiliser un
postrotate
script pour relancer votre script une fois la rotation effectuée. Cela se fait pour beaucoup de démons (redémarrer ou recharger le démon), mais ne connaissant pas votre script, je ne sais pas si cette solution vous conviendra ou non (votre script dépend-il d'un état généré il y a quelque temps?).Contenu de
/etc/logrotate.d/your-script-name
:la source
Vous pouvez diriger stdout vers "split" (partie de coreutils sous linux). Il vous permet de diviser le fichier / stdin en morceaux en fonction de la taille, du nombre de lignes, etc. Une fois que vous l'avez divisé, vous pouvez le gérer avec logrotate si nécessaire.
la source