Daemontools multilog 丢失日志行时间信息。如何解决?

don*_*llo 3 logs buffer daemontools

我正在使用daemontools来监视进程及其输出日志。我正在使用multilog将日志写入磁盘。

日志的运行脚本是:

#!/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
Run Code Online (Sandbox Code Playgroud)

被监控的进程也会将输出写入 stderr。因此,在该进程的运行脚本中,有以下几行将 stderr 重定向到 stdout:

exec 2>&1
exec ./my_process
Run Code Online (Sandbox Code Playgroud)

然而,在拖尾日志文件时,我看到数百行输出突然出现(受监控的进程每隔几秒写入一次输出),并且日志行上的时间戳在亚微秒级别上有所不同。我从过程的性质知道日志行之间的时间差异不是那么小。显然 multilog 正在缓冲输出,然后在准备写入文件时添加时间戳。我希望时间戳能更准确地反映输出行的时间。如何解决这个问题?

don*_*llo 8

被监控的脚本是一个 Python 脚本。为了使所有标准流无缓冲,我发现可以将-u选项传递给解释器。这解决了我的问题。