2016-04-22 81 views
0

我在Unix上運行屏幕會話。打開並運行幾個屏幕會話後,我想檢查每個屏幕會話的進度,看看是否有會話完成運行。如何檢查屏幕會話的進度而無需重新連接到會話中?

在命令行中,如果I型:

$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 

然後,我可以看到,如果這個會話結束運行。

但是,有沒有什麼方法可以檢查所有屏幕會話的進度而無需重新附加到每個會話?

+0

你如何定義「完成運行」?我假設你在每個屏幕會話中都運行腳本。您可以讓腳本(或在腳本之後運行的腳本)退出屏幕或寫入日誌文件?或者你可以檢查你在屏幕會話中運行的腳本的PID。 – Matthew

+0

你可以用'-L'參數開始每個屏幕會話,並通過一個單詞或短語的日誌grep? [https://www.gnu.org/software/screen/manual/screen.html](https://www.gnu.org/software/screen/manual/screen.html) – runningviolent

回答

1

(既然你已經標記爲「TMUX」的問題,我會假設你沒事與使用,而不是屏幕TMUX一個答案。)

TMUX有活動監控的概念:如果窗口發生變化,用戶將收到通知。 「活動」是對窗口的任何可視變化,無論是打印出來還是隻是程序結束(並返回到shell,然後shell將打印出提示並因此觸發活動監視器。)如果您的進程已經像那樣運行,那麼您可以跳過下面列表中的第2步,並簡化第4步。

如果您有輸出大量內容的進程並且您不想將該輸出重定向到文件中,那麼您必須求助於沉默監控。在該模式下,Tmux將監視最近N秒內沒有輸出的窗口。我建議不採用這種方法,因爲它需要比活動監測更多的工作。

因此,這裏是你可以做什麼:

  1. 通過將以下內容.tmux.conf啓用所有窗口活動監控:

    set-window-option -g monitor-activity on 
    

    這應該涵蓋大多數usecases的。

  2. 如果您想監視不活動狀態,則必須爲每個窗口設置monitor-silence。你可以在全球範圍內設置它,但我認爲你不會有足夠的幸運有一個適合一切的超時時間;因此,這裏我提出應在各窗口分別運行的命令(通過按前綴,這是Ctrl鍵 - 一個通過默認,然後鍵入它):

    set-window-option monitor-silence 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. 最後,對於其中window_activity_flagwindow_silence_flag爲1的行,即對於Tmux產生的活動或無聲報告的窗口,我們grep。 (您也可以設置活動和靜音監視器,然後grep for 11組合,但這會使設置更加脆弱,所以我將其作爲讀者的練習題:)
    5. 反斜槓僅用於格式化 - 他們正在逃避新線。您可以忽略它們並將所有代碼用作首字母縮寫。

    輸出看起來是這樣的:

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

    前五個窗口有活動通知,最後一個有沉默的通知。

+0

非常感謝!這非常有幫助。 – user118464