如何不进入session获取运行中screen实例的当前输出?
无需进入Screen会话查看输出的几种方法
当然可以!不用进入目标screen会话也能轻松获取它的输出内容,下面是几个实用的方案:
1. 单次捕获当前屏幕快照
使用screen -X hardcopy命令可以快速导出会话当前显示的内容到文件,非常适合临时查看:
- 先列出所有screen会话,找到你要查看的会话ID或名称:
screen -list - 导出指定会话的屏幕内容到自定义文件:
screen -S [会话ID/名称] -X hardcopy /tmp/screen_current_output.txt - 查看导出的内容:
cat /tmp/screen_current_output.txt
如果需要捕获滚动缓冲区里的历史内容(不止当前屏幕显示的),可以加上-h参数:
screen -S [会话ID/名称] -X hardcopy -h /tmp/screen_history_output.txt
2. 开启实时日志记录
如果需要持续跟踪程序的输出,可以远程给screen会话开启日志功能,之后直接查看日志文件即可:
- 先指定日志文件路径(可选,默认是会话目录下的
screenlog.0):screen -S [会话ID/名称] -X logfile /var/log/screen_continuous.log - 开启日志记录:
screen -S [会话ID/名称] -X log on - 实时查看最新输出:
tail -f /var/log/screen_continuous.log
不需要日志时记得关闭:
screen -S [会话ID/名称] -X log off
3. 发送命令让程序输出重定向(进阶)
如果程序本身支持输出重定向,你还可以远程给screen会话发送命令,让程序把输出写到指定文件:
# 发送Ctrl+C暂停程序(如果需要),然后发送重定向命令,最后重启程序 screen -S [会话ID/名称] -X stuff "^C" screen -S [会话ID/名称] -X stuff "your_program >> /tmp/program_output.log 2>&1\n"
这个方法适合需要长期捕获程序输出,但之前没开日志的场景,不过要注意会中断当前运行的程序。
内容的提问来源于stack exchange,提问作者Waka




