gnu-screen - 有没有办法让哪个会话与屏幕中的哪个日志文件相关联?
问题描述
我正在使用screen
监视几个并行作业来测试我的程序的小变化。我给每个screen
会话一个不同的日志文件。我不记得我为哪个会话设置了哪个日志文件,现在希望我做到了!
有没有办法查询哪个会话名称(通常是形式#####.ttys000N.hostname
)与哪个日志文件一起使用,反之亦然?
(它关注的对象:gnu-screen标签建议确定问题与哪个 SX 站点最相关。根据 SuperUser 和 StackOverflow 的帮助页面,这个问题似乎大致同样适用于任何一个社区。如果您愿意,请随意迁移它认为它属于其他地方。)
解决方案
我没有找到我建议的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'
推荐阅读
- sql-server - SSRS - 单个文本框中的行间距
- c# - 带有 ASP.NET Web 窗体的 Azure CosmosDB SDK v3
- go - 无法将复合文字与 map[string][]struct 一起使用
- java - 如何从包含税表的文件中读取特定的应税收入和收入税?
- awk - 如何打印来自不同文件的列?
- nginx-reverse-proxy - 是否可以用 OpenResty 在 Nginx Stream 前面实现 OIDC?
- php - Laravel 资源集合 - 分页 - JSON 响应错误
- php - 在 if 语句中使用 in_array 更快或更有效的替代方法
- django - Django:如何访问已安装的第三方应用程序的模型和数据
- twitter - Twitter Restful API 在查询字符串中传递计数参数时抛出 401 未经授权的错误