我如何强制 GNU Screen 刷新其日志文件?

我如何强制 GNU Screen 刷新其日志文件?

我在用屏幕像这样:

screen -L -dm -S session1 -c "./game_server -options"

覆盖游戏服务器。我将它们的输出记录到一个文件中,并可以使用以下命令向它们发送输入:

screen -r session1 -p0 -X "stuff \"this into input^M\""

可以在配置文件中指定日志文件刷新之间的超时时间(在我的情况下是 10 秒)。

我遇到的问题是无法强制屏幕将输出刷新到日志文件。例如,在我向游戏服务器发送“status”命令后,游戏服务器会打印一些信息,但至少需要 10 秒钟才能将其添加到日志文件中。

我曾尝试发送:

screen -r session1 -p0 -X "logfile flush 1"

但它对此没有反应。我也试过了刷新 0没有运气。

我不想总是以 1 秒的超时时间进行记录;只有在收到命令后才真正需要这样做。请注意,我在这里对性能很担心,因为会话毕竟是在运行游戏服务器。

我如何强制屏幕将输出刷新到日志文件?除了使用屏幕之外,还有其他方法可以完成我需要的操作(将输出记录到文件并将命令发送到输入),也许使用 FIFO?

答案1

尝试这个:

屏幕-r session1-X冒号“日志文件刷新1 ^ M”

logfile flush 1实际上不是屏幕命令,但colon它是。接下来要传递的是必须用引号括起来的参数,末尾的 ^M 实际上应该是 Ctrl-M。Ctrl-V 后跟 Ctrl-M 通常可以输入实际的 Ctrl-M。

答案2

我和你有完全相同的需求。Logfile flush是发送到屏幕的有效命令 - 但是,它不需要被引用,你也可以将其设置为 0 以立即刷新。

将您的线路更改为

screen -r session1 -p0 -X logfile flush 0

不过,当你读完日志文件后,一定要把它改回来

screen -r session1 -p0 -X logfile flush 10

默认值为 10 秒,但您可以将其设置为您认为合适的任何时间。

相关内容