【问题标题】:How to check progress of a screen session without reattaching into the session?如何在不重新连接到会话的情况下检查屏幕会话的进度?
【发布时间】:2016-04-22 18:11:53
【问题描述】:

我在 Unix 上运行屏幕会话。打开并运行几个屏幕会话后,我想检查每个屏幕会话的进度,看看是否有任何会话完成运行。

在命令行中,如果我输入:

$screen -ls

我可以看到分离的屏幕会话列表,例如

There are screens on:
    4683.pts-0.xxxx (Detached)
    4869.pts-0.xxxx (Detached)
    4848.pts-0.xxxx (Detached)
    4890.pts-0.xxxx (Detached)
4 Sockets in /var/run/screen/S-xyzxyz.

如果我想检查 4 个会话中的任何一个是否完成运行,我可以重新附加一个会话以检查进度:

$screen -r 4683.pts-0.xxxx

然后我可以查看此会话是否完成运行。

但是,有什么方法可以检查所有屏幕会话的进度而不重新附加到每个会话?

【问题讨论】:

  • 你如何定义“完成运行”?我假设您在每个屏幕会话中运行一个脚本。您可以让脚本(或在它之后运行的脚本)退出屏幕或写入日志文件?或者您可以检查您在屏幕会话中运行的脚本的 PID。
  • 您能否使用-L 参数启动每个屏幕会话并在日志中查找单词或短语? https://www.gnu.org/software/screen/manual/screen.html

标签: bash shell command-line tmux gnu-screen


【解决方案1】:

(由于您已将问题标记为“tmux”,因此我假设您可以接受使用 Tmux 而不是 Screen 的答案。)

Tmux 有一个活动监控的概念:如果窗口发生变化,会通知用户。 “活动”是对窗口的任何视觉变化,无论是打印出来的东西还是程序完成(并返回到 shell,shell 反过来会打印出它的提示并因此触发活动监视器。)如果你的进程已经表现得像这样,你可以跳过下面列表中的第 2 步,也可以简化第 4 步。

如果您有输出大量内容的进程并且您不想将该输出重定向到文件中,则您将不得不求助于静默监控。在该模式下,Tmux 将监视在最后 N 秒内没有发生输出的窗口。我建议不要使用这种方法,因为它需要比活动监控更多的工作。

所以你可以这样做:

  1. 通过将以下内容放入.tmux.conf,为所有窗口启用活动监控:

    set-window-option -g monitor-activity on
    

    这应该涵盖大部分用例。

  2. 如果您想监控不活动,您必须为每个窗口设置monitor-silence。您可以全局设置它,但我认为您不会幸运地拥有一个适合所有情况的超时;因此,在这里我提出一个应该在每个窗口中分别运行的命令(通过按前缀,默认为 Ctrl-a,然后键入它):

    set-window-option monitor-silence N
    

    这里的 N 是 Tmux 应该认为窗口静默的秒数。

  3. 现在您可以启动所有进程并从会话中分离。

    注意:活动和静音监控只会通知您未查看的窗口;因此,如果您希望我们将在下一步生成的报告完整,您应该从所有会话中分离出来。

  4. 最后,您可以运行以下命令来找出哪些会话有活动或静音通知:

    tmux list-windows -a \
        -F "#{window_activity_flag}#{window_silence_flag} #S:#W" \
    | egrep '^(10|01)'
    

    这是怎么回事?

    1. tmux list-windows 显然列出了窗口;
    2. -a 表示“列出所有会话的所有窗口”;
    3. -F 指定输出格式。这里我们输出两个标志(可以是01),后跟一个空格,然后是由冒号分隔的会话和窗口名称;
    4. 最后,我们grep 用于window_activity_flagwindow_silence_flag 为1 的行,即Tmux 生成活动或静音报告的窗口。 (您也可以设置活动和静音监视器,然后使用 grep 查找 11 组合,但这会使设置更加脆弱,所以我将其作为练习留给读者 :)
    5. 反斜杠仅用于格式化 - 它们用于转义换行符。您可以省略它们并将所有这些代码用作单行代码。

    输出如下所示:

    10 project:vim
    10 project:zsh
    10 rfcs:WebDAV
    10 rfcs:WebDAV requirements
    10 rfcs:Versioning WebDAV
    01 test:zsh
    

    前五个窗口有活动通知,最后一个窗口有静音通知。

【讨论】:

  • 非常感谢!这很有帮助。
猜你喜欢
  • 1970-01-01
  • 2013-12-06
  • 2010-12-19
  • 1970-01-01
  • 2022-12-12
  • 1970-01-01
  • 2021-03-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多