如何让 svlogd 在 runit 作业中更频繁地写入数据

up_*_*ons 5 linux logs

我目前将此日志/运行脚本作为 runit 服务的一部分:

#!/bin/sh
set -e

exec svlogd -tt ./main
Run Code Online (Sandbox Code Playgroud)

如果我“ tail -f log/main/current”,我看不到“实时”写的服务输出。它似乎只以 4K 的增量转储标准输出。因此,如果不小心使用该服务,我将看不到最新的日志数据,除非我实际上对该服务执行了“sv restart”,在这种情况下,所有数据都会在服务重新启动之前写入日志。

我已经尝试过“-l”和“-b”参数,但这些没有任何影响(我什至不确定它在这一点上是否重要)。

jpc*_*jpc 3

不幸的是,看起来故障在于守护进程,它在写入日志数据后没有刷新它的标准输出。

svlogd 仅进行行缓冲,因此一旦完整的行到达标准输入,它就会将其输出到日志文件。

  • 在守护进程(Ruby 进程)中的“puts”之后添加“$stdout.flush”可以解决此问题!:) (2认同)