Linux Screen重定向后无屏幕回显问题求助
让Screen会话和文件同时捕获PHP程序输出的方法
你的问题核心是:当把输出全量重定向到文件时,Screen会话的终端因为没有收到任何输出流,所以attach后显示空白。要实现同时输出到文件和Screen终端,用tee命令就能完美解决——它的作用就是将标准输出内容同时发送到指定文件和标准输出(也就是Screen的终端界面)。
修改后的命令
如果你只需要把标准输出(echo的内容)同时输出,用这个命令:
screen -d -m bash -c 'php forlog.php | tee -a ~/forlog.log'
如果需要把错误输出(比如PHP的警告、报错)也一并同时输出到文件和Screen,就把stderr合并到stdout后再交给tee处理:
screen -d -m bash -c 'php forlog.php 2>&1 | tee -a ~/forlog.log'
关键细节解释
tee -a:-a参数和你原来的>>效果一致,是追加写入文件,不会覆盖原有内容;如果用不带-a的tee,则会覆盖文件。2>&1:把标准错误流(stderr,编号2)重定向到标准输出流(stdout,编号1),这样所有输出(正常内容+错误信息)都会被tee处理,同时送到文件和Screen终端。- 为什么原来的命令看不到输出?因为你把
stdout和stderr都直接重定向到了文件,Screen会话的终端没有接收到任何输出数据,自然显示空白。而tee相当于做了一个“分流”,让输出同时走两条路。
这个方案完全不需要用nohup,完美符合你的需求。attach到Screen会话后,你就能实时看到程序的输出,同时这些内容也会被写入到~/forlog.log文件里。
内容的提问来源于stack exchange,提问作者isaac.hazan
相关产品推荐
相关产品推荐

