Estoy usando daemontools para monitorear un proceso y su registro de salida. Estoy usando multilog para escribir los registros en el disco.
El script de ejecución para el registro es:
#!/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
El proceso que se está supervisando también escribe la salida en stderr. Entonces, en el script de ejecución del proceso, hay las siguientes líneas para redirigir stderr a stdout:
exec 2>&1
exec ./my_process
Sin embargo, mientras sigo el archivo de registro, veo cientos de líneas de salida que vienen en ráfagas (el proceso monitoreado escribe la salida cada pocos segundos), y la marca de tiempo en las líneas de registro difiere en niveles de submicrosegundos. Sé por la naturaleza del proceso que la diferencia de tiempo entre las líneas de registro no es tan pequeña. Claramente, multilog está almacenando en búfer la salida y luego agrega la marca de tiempo cuando está listo para escribir en el archivo. Me gustaría que las marcas de tiempo reflejen más de cerca el momento en que se emitió la línea. ¿Cómo se puede arreglar esto?
Respuesta aceptada:
El script que se monitoreaba era un script de Python. Para hacer que todas las secuencias estándar no tengan búfer, descubrí que solo se puede pasar el -u
opción al intérprete. Esto resolvió el problema en mi caso.