主管的孩子stdout.log:实时读取

主管的孩子stdout.log:实时读取

Supervisor 激活一些子进程。

我这样配置它们:

[program:XXXXX]
command=/XXXXX/XXXXX
directory=/XXXXXX
autostart=true
autorestart=true
startsecs=3
startretries=10000
stdout_logfile=/XXXXXX/stdout.log
stdout_logfile_maxbytes=1MB
stderr_logfile=/XXXXXX/stderr.log
stderr_logfile_maxbytes=1MB

其中一个过程是生成大量屏幕输出,我希望在测试期间实时读取这些输出:每秒打印 5 行。

他们现在已经登录了stdout.log

我想stdout.log和一起阅读

watch -0.1 tail /XXXXX/stdout.log

但我发现它在收到每一行时都没有更新:日志内容可能会被缓存,直到达到某个预定义的大小,然后再保存到文件中。

我不需要保留标准输出以供将来参考。

是否有可能将主管设置为持续更新 stdout.log

或者,为了避免从长远来看损坏磁盘,是否有可能打印回最后 X 行stdout而不将其保存到stdout.log

答案1

如果您想避免损坏磁盘(我已经很久没有看到有人担心这个问题了),您可以创建一个 ramdisk 来将这些日志文件定向到如下所示:

mkdir /var/log/tmplogs
mount -t tmpfs -o size=5m tmpfs /var/log/tmplogs

或者采用 fstab 格式:

tmpfs       /var/log/tmplogs   nodev,nosuid,noexec,nodiratime,size=5M 0 0

然后使用该/var/log/tmplogs目录作为这些文件的目标位置。

这不会解决所说的任何日志缓冲问题。但通常延迟是由您的命令缓冲其输出引起的(有或没有 tty 时它的行为可能有所不同)而不是由supervisord引起的,您可以确认遵循supervisord中的示例第803期

是否可以设置Supervisor持续更新stdout.log?

我会说不,因为它已经应该在收到后立即写入日志,并且大多数情况下这不是主管问题,但是如果没有启动命令,则无法通过以下方式判断您是否遇到了错误或者是否正常你的命令。

相关内容