我正在使用screen
来监控几个并行作业,以测试我程序的小变化。我给每个screen
会话一个不同的日志文件。我不记得我为哪个会话设置了哪个日志文件,现在希望我做到了!
有没有办法查询哪个会话名称(通常格式为#####.ttys000N.hostname
)与哪个日志文件相关,反之亦然?
<小时/> (它关注的是:gnu-screen标签建议确定问题与哪个SX网站最相关。根据SuperUser和StackOverflow的帮助页面,此问题似乎大致同样适用于任何一个社区。请随意迁移它如果你认为它属于其他地方。)
答案 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'