我有一个脚本,它会输出大量调试数据,而我希望避免将这些数据保存在磁盘上(特别是因为文件系统位于闪存卡上)。因此,我使用nohup
+ &
disposingstdout
和stderr
to在后台运行它/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
;但目前这已经足够好了,并回答了这个问题。仍然欢迎不同的实现。