有没有办法让哪个会话与屏幕中的哪个日志文件相关联?

时间:2018-06-18 21:47:07

标签: gnu-screen

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

有没有办法查询哪个会话名称(通常格式为#####.ttys000N.hostname)与哪个日志文件相关,反之亦然?

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

1 个答案:

答案 0 :(得分:1)

我没有发现建议的评论,即使用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'