268

を使用して実験を実行するサーバーがたくさんありますscreen。手順は次のとおりです。

  1. sshサーバーXXXへ
  2. 発売screen
  3. いくつかのタブで実験を開始
  4. 切り離すscreen
  5. サーバーから切断する

ssh実験が実行されている間、すべてのサーバーに ing を実行し、実行中のプロセスを一覧表示することで (topまたはを使用して) 、実験がどのサーバー上にあるかを簡単に見つけることができますps

ただし、実験が終了したら、画面セッションを開いているサーバーをどのように見つけることができますか (出力を確認したり、再起動したりできるようにするため)。

PS: 私の実験では出力もファイルに出力されますが、これは私の質問のポイントではありません。

4

11 に答える 11

479

ユーザーのすべての画面セッションを一覧表示するには、そのユーザーとして次のコマンドを実行します。

screen -ls

特定のマシンですべてのスクリーン セッションを表示するには、次のようにします。

ls -laR /var/run/screen/

私は自分のマシンでこれを取得します:

gentle ~ # ls -laR /var/run/screen/

/var/run/screen/:
total 1
drwxrwxr-x  4 root utmp   96 Mar  1  2005 .
drwxr-xr-x 10 root root  840 Feb  1 03:10 ..
drwx------  2 josh users  88 Jan 13 11:33 S-josh
drwx------  2 root root   48 Feb 11 10:50 S-root

/var/run/screen/S-josh:
total 0
drwx------ 2 josh users 88 Jan 13 11:33 .
drwxrwxr-x 4 root utmp  96 Mar  1  2005 ..
prwx------ 1 josh users  0 Feb 11 10:41 12931.pts-0.gentle

/var/run/screen/S-root:
total 0
drwx------ 2 root root 48 Feb 11 10:50 .
drwxrwxr-x 4 root utmp 96 Mar  1  2005 ..

これは、セキュリティ、状態、およびストリームを処理するために、ファイルシステムのアクセス許可にラップされた Unix ソケットのかなり見事な Unixy の使用法です。

于 2009-02-11T17:56:04.973 に答える
22

コマンドscreen -listは、あなたが望むものかもしれません。

を見る

于 2009-02-11T17:55:04.287 に答える
13

joshperry の答えは正しいのですが、スクリーン名 (-t オプションで設定したもの) が実際にセッションを識別するために使用するものであることがわかりません。(もちろん、彼のせいではありません。それは画面の欠陥です)

そのため、代わりに次のようなスクリプトを使用します。ps auxw|grep -i screen|grep -v grep

于 2010-08-25T08:48:55.433 に答える
10

あなたの質問はよくわかりませんが、現在開いている画面セッションのリストが本当に必要な場合は、次を試してください。

screen -ls
于 2009-02-11T17:55:55.283 に答える
8
 For windows system

 Open putty 
 then login in server

コンソールで画面を見たい場合は、コマンドを書く必要があります

 Screen -ls

画面にアクセスする必要がある場合は、以下のコマンドを使用する必要があります

 screen -x screen id

PWDコマンドラインに書き込んで、現在どのフォルダーにいるかを確認します

于 2013-11-22T10:51:38.177 に答える
5

ほとんどの場合、 a でscreen -RRx $username/十分です :)

それでもすべての画面をリストしたい場合は、次のスクリプトをパスに入れ、それを screen または好きなように呼び出します。

#!/bin/bash
if [[ "$1" != "-ls-all" ]]; then
    exec /usr/bin/screen "$@"
else
    shopt -s nullglob
    screens=(/var/run/screen/S-*/*)
    if (( ${#screens[@]} == 0 )); then
        echo "no screen session found in /var/run/screen"
    else
        echo "${screens[@]#*S-}"
    fi
fi

オプション -ls-all を最初のパラメーターとして指定すると、すべての画面セッションが表示されることを除いて、画面とまったく同じように動作します。

于 2012-03-02T17:40:09.703 に答える
4

複数の人がすでに指摘している

$ screen -ls

画面セッションをリストします。

これはあなたに役立つかもしれない別のトリックです。

次のコマンドをサーバー xxx の.bashrc ファイルの最後の行として追加すると、ログイン時に screen セッションに自動的に再接続されます。

screen -d -r

お役に立てば幸いです。

于 2009-02-11T23:01:59.570 に答える
-4

実験をバックグラウンドで実行し続けるために screen を使用しているのですか?もしそうなら、バックグラウンドで起動してみませんか?

./experiment &

そして、私がやった仕事の通知を受け取る方法を尋ねているなら、実験をメールコマンドと一緒に並べてみませんか?

./experiment && echo "the deed is done" | mail youruser@yourlocalworkstation -s "job on server $HOSTNAME is done"
于 2009-02-11T17:58:23.437 に答える