我在用屏幕像这样:
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 秒,但您可以将其设置为您认为合适的任何时间。