为何tee命令无法捕获Valve游戏服务器的STDOUT输出?
解决Valve游戏服务器日志捕获不全/为空的问题
你遇到的情况是因为程序把日志拆分到了**标准输出(STDOUT)和标准错误输出(STDERR)**两个通道,而你原来的命令只捕获了STDOUT,同时还可能存在输出缓冲导致内容没及时写入文件的问题。
解决方案1:同时捕获STDERR和STDOUT
把命令改成这样,就能让所有终端显示的日志都通过tee写入文件:
./srcds_linux -game tf +map cp_dustbowl -maxplayers 24 2>&1 | tee -a mylogfile.txt
这里的2>&1是把STDERR(文件描述符2)的内容重定向到STDOUT(文件描述符1),这样tee就能同时处理两个通道的输出,终端实时显示的同时,所有内容都会追加到日志文件里。
解决方案2:强制行缓冲(解决部分内容延迟写入的问题)
如果改了上面的命令后,还是有部分日志在服务器关闭后才写入文件,可以用stdbuf强制程序使用行缓冲,确保日志实时刷到文件:
stdbuf -oL ./srcds_linux -game tf +map cp_dustbowl -maxplayers 24 2>&1 | tee -a mylogfile.txt
-oL参数让程序的STDOUT使用行缓冲模式,每输出一行就立刻写入文件,避免缓冲积累导致的内容延迟。
内容的提问来源于stack exchange,提问作者madmonkey
相关产品推荐
相关产品推荐

