首页 > 解决方案 > 有没有办法让哪个会话与屏幕中的哪个日志文件相关联?

问题描述

我正在使用screen监视几个并行作业来测试我的程序的小变化。我给每个screen会话一个不同的日志文件。我不记得我为哪个会话设置了哪个日志文件,现在希望我做到了!

有没有办法查询哪个会话名称(通常是形式#####.ttys000N.hostname)与哪个日志文件一起使用,反之亦然?


(它关注的对象:标签建议确定问题与哪个 SX 站点最相关。根据 SuperUser 和 StackOverflow 的帮助页面,这个问题似乎大致同样适用于任何一个社区。如果您愿意,请随意迁移它认为它属于其他地方。)

标签: gnu-screen

解决方案


我没有找到我建议的screen -ls用于列出进程 ID 的评论,然后lsof -p对这些进行操作以找到非常令人满意的文件名,所以这是另一个不完全令人满意的替代方案:

可以选择-X将命令发送到远程屏幕,但不幸的是,遥控器上会显示任何输出。可以选择-Q发送命令并在本地打印结果,但它只接受非常有限的一组命令。但是,其中之一是lastmsg,它重复显示的最后一条消息。

因此,您可以使用-X logfile远程显示日志文件的名称,然后立即使用-Q lastmsg在本地复制该显示!当然,在这个非原子动作的中间有可能发生一些事件。这两个命令不能组合。这是一个例子:

#!/bin/bash
screen -ls |
while read session rest
do  if [[ "$session" =~ [0-9]+\..+ ]]
    then  screen -S "$session" -X logfile # shows in status
          msg=$(screen -S "$session" -Q lastmsg)
          # logfile is '/tmp/xxxxx'
          echo "$session $msg"
    fi
done

和一些典型的输出:

21017.test2 logfile is '/tmp/xxxxx'
20166.test logfile is '/tmp/mylog.%n'

推荐阅读