流式标准输出

流式标准输出

我有一个脚本,它会输出大量调试数据,而我希望避免将这些数据保存在磁盘上(特别是因为文件系统位于闪存卡上)。因此,我使用nohup+ &disposingstdoutstderrto在后台运行它/dev/null

但当它开始出现故障时,我希望能够在其 stdout 上实时获取调试输出。就像通过设备的串行端口连接以获取其输出一样。可以监视流,但流不会存储在设备上。

我考虑将输出重定向到本地 UDP 套接字,这样我就可以连接和断开“流”,而不会对脚本产生任何影响,如果有人监听数据,同一个脚本也不会受到影响。但我对我可以使用的不同技术以及已有的工具感兴趣。

如何流式传输正在运行的进程的输出?

限制

我无法修改将调试信息输出到的库stdout。我必须将脚本传输stdout到可以对其进行流式传输的程序(而不是将整个输出保存到磁盘)。

答案1

将输出通过管道传输到 NetCat,它可以将数据传输到 UDP 套接字。

答案2

正如@Eric Renouf 所指出的,screen就足以达到目的了。 的日志记录选项也非常有用,因为在会话中的任何时刻,都可以使用或使用以下命令screen打开或关闭日志文件C-a H:log手册上有记录. 通过这种方式,很容易精确地控制记录的输出量。

启动脚本:

screen -dmS $SESSION_NAME "$SCRIPTDIR/$SCRIPT_NAME" 2>&1

停止脚本:

pkill -f "$BIN .+/$SCRIPT_NAME"

我希望使用更简单、“一切都是文件”的 Linux 风格,以便能够使用更简单的工具,例如tee;但目前这已经足够好了,并回答了这个问题。仍然欢迎不同的实现。

相关内容