J'ai une application qui doit enregistrer chaque transaction. Chaque message de journal est vidé car nous devons avoir un enregistrement de ce qui s'est produit avant un crash. Mes collègues et moi étions curieux de savoir comment obtenir les effets de mise en mémoire tampon sur les performances tout en garantissant que le message du journal avait quitté le processus.
Ce que nous avons trouvé est:
- créer un FIFO sur lequel l'application peut écrire, et
- rediriger le contenu de cette FIFO vers un fichier standard via
cat
.
Autrement dit, ce qui était ordinairement:
app --logfile logfile.txt
est maintenant:
mkfifo logfifo
cat logfifo &> logfile.txt &
app --logfile logfifo
Y a-t-il des pièges à cette approche? Cela a fonctionné lorsque nous l'avons testé, mais nous voulons être absolument sûrs que les messages trouveront leur chemin vers le fichier de redirection même si l'application d'origine se bloque.
(Nous n'avons pas le code source de l'application, donc les solutions de programmation sont hors de question. De plus, l'application n'écrira pas stdout
, donc il syslog
n'est pas possible de diriger directement vers une autre commande. Il n'est donc pas possible .)
Mise à jour: j'ai ajouté une prime. La réponse acceptée n'impliquera paslogger
pour la simple raison que ce logger
n'est pas ce que j'ai demandé. Comme l'indique la question d'origine, je ne cherche que des pièges en utilisant un FIFO.