2016-04-22 7 views
0

私はUnix上でスクリーンセッションを実行しています。いくつかのスクリーンセッションを開いて実行した後、各スクリーンセッションの進行状況を確認して、セッションの実行が完了したかどうかを確認したいと思います。コマンドラインでセッションに再接続せずに画面セッションの進行状況を確認するにはどうすればよいですか?

、私が入力した場合:

$screen -ls 

私は、例えば、デタッチ画面セッションのリストを見ることができました私は4つのセッションのいずれかが実行を終了するかどうかを確認したい場合は

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. 

、私は進行状況を確認する1つのセッションを再接続できます。このセッションの実行が終了する場合

$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は、アクティビティの監視の概念を持っています:変更がウィンドウ内で発生した場合、ユーザーに通知されます。 「アクティビティ」とは、ウィンドウに表示される視覚的な変化のことです。何かをプリントアウトするか、単にプログラムを終了させるだけです(そしてシェルに戻ると、プロンプトが表示され、アクティビティモニターがトリガーされます)。下のリストのステップ2をスキップしてステップ4を簡略化することもできます。

多くのものを出力するプロセスがあり、その出力をファイルにリダイレクトしたくない場合は、沈黙監視。このモードでは、Tmuxは最後のN秒間に出力が発生しなかったウィンドウを監視します。私は、活動モニタリングよりも多くの作業が必要なので、このアプローチに反対することをお勧めします。

だからここにあなたが何ができるかです:

  1. .tmux.confに次のように置くことによって、すべてのウィンドウのための活動の監視を有効にする:ユースケースのほとんどをカバーしなければならない

    set-window-option -g monitor-activity on 
    

    を。

  2. アクティブでないことを監視する場合は、ウィンドウごとにmonitor-silenceを設定する必要があります。グローバルに設定することはできますが、すべてに合うタイムアウトを1つだけ持つことは十分に幸運ではないでしょう。したがって、ここで私は(Ctrlキーで押す接頭辞によって、 - そしてデフォルトで、そしてそれをタイプ)個別のウィンドウで実行する必要があるコマンドを提示:

    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は、出力フォーマットを指定します。ここでは、2つのフラグ(0または1のいずれか)を出力してから、スペースとセッション名とウィンドウ名をコロンで区切って出力します。
    4. 最後にwindow_activity_flagまたはwindow_silence_flagのいずれかが1の行、つまりTmuxがアクティビティまたは無音レポートを生成したウィンドウの場合は、grepとなります。 (アクティビティモニタと無音モニタの両方を設定してから11の組み合わせをgrepすることもできますが、これにより設定がさらに壊れやすくなりますので、読者のためのエクササイズとして残しておきます:)
    5. バックスラッシュはフォーマット彼らは改行を逃れる。それらを省略し、すべてのコードをonelinerとして使用することができます。

    出力は次のようになります。最初の5つのウィンドウが活動の通知を持って

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

    、最後の一つは沈黙の通知を持っています。

+0

ありがとう!これは非常に役に立ちます。 – user118464

関連する問題