为什么这个命令没有捕获STDOUT?

问题描述 投票:0回答:1

我有一个用于运行 Valve 专用游戏服务器的可执行文件。当它运行时,它将其状态记录到终端。我想在文件中捕获此输出,同时也能看到它。

./srcds_linux -game tf +map cp_dustbowl -maxplayers 24 | tee -a mylogfile.txt

可执行文件运行得很好,我的终端实时填充了服务器日志,但是当我终止服务器时,

mylogfile.txt
是空的。我是否可以从可执行文件中看到日志,但它实际上并未记录到 STDOUT?我对 bash/linux 脚本编写比较陌生。我并不是想捕获 STDERR,尽管它至少将我在终端中看到的一些日志打印到
mylogfile.txt
,但不是几乎全部。

linux bash stdout tee
1个回答
0
投票

在 Linux 上处理源专用服务器并捕获其所有输出的另一个选项是在 docker 容器中运行它,可能使用来自 https://github.com/Hackebein/docker-srcds 的现有映像。

如果您使用

run
命令但省略
-ti
选项,则容器将附加
STDOUT
STDERR
但不会附加
STDIN
并且不会分配终端 - 强制可执行文件输出所有它的内容到标准流,然后您可以捕获。

在容器中运行还允许您进行更多控制,例如指示容器记录到文件或系统日志。

© www.soinside.com 2019 - 2024. All rights reserved.