我不确定在这里使用什么术语,所以请多多包涵。
我正在编写一个产生大量日志的应用程序。我认为能够让我的应用程序将日志流式传输到foo
,并允许其他进程foo
像流一样从中进行读取会很酷(例如/dev/random
)。
也就是说,我只想在某处连续流日志(而不必担心诸如归档,删除之类的文件系统之类的东西),并且能够让其他进程“进入”该流,就好像它是无休止的一样。文件。
我该怎么做呢?什么foo
啊
理想情况下:
terminal 1
> mkthing foo
> while :; do echo 'abcdefg' >> foo; sleep 1; done
terminal 2
> echo foo
(outputs "abcdefg" every second)
查看日志的绝对正常方法是将它们写入文件。当您想查看日志时,请阅读文件。要在将行追加到文件中时对其进行监视,请使用诸如之类的命令tail -f
,该命令到达文件末尾后,将其保持打开状态,并监视追加到其上的多余行。该选项-f
用于“跟随”,而更少的情况下,您可以具有与F
“跟随”相同的效果;在其他程序中,这可以称为“定序”文件,因为它tail
是执行此操作的经典实用程序。有关尾部实用程序的更多信息,请参见此站点上的tail
标签。
如果您绝对不想将日志写入文件,则可以在screen或tmux中运行该应用程序。要/usr/bin/my_application --some-option
在后台运行,并带有屏幕:
screen -S myapp -d -m /usr/bin/my_application --some-option
要查看日志:
screen -S myapp -d -r
按Ctrl+A d分离,即停止查看日志。在查看日志时,您也可以将输入发送到应用程序,这可能是可取的,也可能是不希望的。要仅授予只读访问权限,请参阅是否可以在只读模式下运行“屏幕”?
使用tmux,启动应用程序:
tmux new-session -s myapp -d /usr/bin/my_application --some-option
要查看最新日志:
tmux attach -r -t myapp
按Ctrl+A d分离。tmux attach
无需-r
与应用程序进行交互即可运行。
一个命名管道是不是你想要的。我之所以提到它,是因为从表面上看它是合适的(在我写时,它在评论中突然出现)。它将按照您的描述进行操作:
mkfifo foo
while :; do echo 'abcdefg' >> foo; sleep 1; done
与...平行
cat foo
这不是您想要的,因为必须只有一个读者。如果没有阅读器,则书写面会阻塞。如果有多个阅读器,则每行(或块,具体取决于程序如何产生输出)将被一个或多或少随机选择的阅读器看到。如果有阅读器,但它消失了,书写端将无法书写,并且如果未禁用它们,则会收到SIGPIPE。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句