![如何让 svlogd 在 runit 作业中更频繁地写入数据](https://linux22.com/image/19415/%E5%A6%82%E4%BD%95%E8%AE%A9%20svlogd%20%E5%9C%A8%20runit%20%E4%BD%9C%E4%B8%9A%E4%B8%AD%E6%9B%B4%E9%A2%91%E7%B9%81%E5%9C%B0%E5%86%99%E5%85%A5%E6%95%B0%E6%8D%AE.png)
我目前将此日志/运行脚本作为 runit 服务的一部分:
#!/bin/sh
set -e
exec svlogd -tt ./main
如果我“ tail -f log/main/current
”,我看不到“实时”写入的服务输出。它似乎只以 4K 增量转储标准输出。因此,如果该服务使用较少,我将看不到最新的日志数据,除非我实际上对服务执行了“sv restart”,在这种情况下,所有数据都会在服务重新启动之前写入日志。
我已经尝试过“-l”和“-b”参数,但这些没有任何效果(而且我什至不确定此时它是否重要)。
答案1
不幸的是,看起来故障在于守护进程,它在写入日志数据后没有刷新它的标准输出。
svlogd 仅进行行缓冲,因此一旦完整的行到达标准输入,它就会将其输出到日志文件。