J'utilise daemontools pour surveiller un processus et son journal de sortie. J'utilise multilog pour écrire les journaux sur le disque.
Le script d'exécution du journal est :
#!/bin/bash
PATH=/usr/local/bin:/usr/bin:/bin
cd /usr/local/script_dir
exec multilog t s16777215 n50 '!tai64nlocal' '!/bin/gzip' /var/log/script_log
Le processus surveillé écrit également la sortie sur stderr. Ainsi, dans le script d'exécution du processus, il y a les lignes suivantes pour rediriger stderr vers stdout :
exec 2>&1
exec ./my_process
Cependant, tout en suivant le fichier journal, je vois des centaines de lignes de sortie arriver en rafales (le processus surveillé écrit la sortie toutes les quelques secondes), et l'horodatage sur les lignes de journal diffère à des niveaux inférieurs à la microseconde. Je sais d'après la nature du processus que la différence de temps entre les lignes de journal n'est pas si petite. Il est clair que multilog met en mémoire tampon la sortie, puis ajoute l'horodatage lorsqu'il est prêt à écrire dans le fichier. J'aimerais que les horodatages reflètent plus fidèlement l'heure à laquelle la ligne a été sortie. Comment résoudre ce problème ?
Réponse acceptée :
Le script surveillé était un script Python. Pour rendre tous les flux standard sans tampon, j'ai découvert qu'il suffit de passer le -u
option à l'interprète. Cela a résolu le problème dans mon cas.