有没有办法让哪个会话与屏幕中的哪个日志文件相关联?
Is there a way to get which session is associated with which logfile in screen?
我正在使用 screen
来监视多个并行作业以测试我的程序的小变化。我给每个 screen
会话一个不同的日志文件。我不记得我为哪个会话设置了哪个日志文件,但现在希望我做到了!
有没有办法查询哪个会话名称(通常为 #####.ttys000N.hostname
形式)与哪个日志文件对应,反之亦然?
(与谁有关:gnu-screen 标签建议确定问题与哪个 SX 站点最相关。根据 SuperUser 和 Whosebug 的帮助页面,这个问题似乎大致同样适用于任何一个社区。随意迁移它如果您认为它属于其他地方。)
我没有找到我建议的评论,即使用 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'
我正在使用 screen
来监视多个并行作业以测试我的程序的小变化。我给每个 screen
会话一个不同的日志文件。我不记得我为哪个会话设置了哪个日志文件,但现在希望我做到了!
有没有办法查询哪个会话名称(通常为 #####.ttys000N.hostname
形式)与哪个日志文件对应,反之亦然?
(与谁有关:gnu-screen 标签建议确定问题与哪个 SX 站点最相关。根据 SuperUser 和 Whosebug 的帮助页面,这个问题似乎大致同样适用于任何一个社区。随意迁移它如果您认为它属于其他地方。)
我没有找到我建议的评论,即使用 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'