Как составить список сеансов экрана? - PullRequest
200 голосов
/ 11 февраля 2009

У меня есть группа серверов, на которых я запускаю эксперименты, используя screen. Процедура следующая:

  1. ssh на сервер XXX
  2. запуск screen
  3. начать эксперименты на нескольких вкладках
  4. отсоединение screen
  5. отключиться от сервера

Пока проводятся эксперименты, я легко могу определить, на каких серверах они находятся, путем ssh для всех серверов и перечисления моих запущенных процессов (используя top или ps).

Однако, как только эксперименты будут завершены, как я могу узнать, на каких серверах у меня открыт сеанс экрана (чтобы я мог посмотреть на вывод, перезапустить их и т. Д.)?

PS: мои эксперименты тоже распечатывают их вывод в файлы ... но это не главное в моем вопросе.

Ответы [ 9 ]

371 голосов
/ 11 февраля 2009

Чтобы вывести список всех сеансов экрана для пользователя, введите в качестве этого пользователя следующую команду:

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 ..

Это довольно блестящее использование Unixy сокетов Unix, включенных в разрешения файловой системы для управления безопасностью, состоянием и потоками.

19 голосов
/ 11 февраля 2009

Команда screen -list может быть тем, что вы хотите.

См. человек

13 голосов
/ 25 августа 2010

Хотя ответ Джошперри правильный, я нахожу очень раздражающим, что он не сообщает вам псевдоним (тот, который вы задали с помощью опции -t), это фактически то, что вы используете для идентификации сеанса. (не его вина, конечно, это недостаток экрана)

Вот почему я вместо этого использую такой скрипт, как этот: ps auxw|grep -i screen|grep -v grep

6 голосов
/ 22 ноября 2013
 For windows system

 Open putty 
 then login in server

Если вы хотите видеть экран в консоли, тогда вам нужно написать команду

 Screen -ls

если вам нужно получить доступ к экрану, используйте следующую команду

 screen -x screen id

Введите PWD в командной строке, чтобы проверить, в какой папке вы сейчас находитесь

6 голосов
/ 11 февраля 2009

Я не совсем уверен в вашем вопросе, но если все, что вам действительно нужно, это список текущих открытых сеансов экрана, попробуйте:

screen -ls
3 голосов
/ 02 марта 2012

В большинстве случаев достаточно 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 в качестве первого параметра.

3 голосов
/ 12 февраля 2009

Несколько человек уже указали, что

$ screen -ls

будет отображать сеансы экрана.

Вот еще один трюк, который может быть полезен для вас.

Если вы добавите следующую команду в качестве последней строки в вашем .bashrc файл на сервере ххх, тогда он автоматически подключится к вашему сеанс экрана при входе в систему.

screen -d -r

Надеюсь, вы найдете это полезным.

0 голосов
/ 23 апреля 2018

пс х | grep SCREEN

чтобы увидеть, что это за экран работает, если вы использовали команду

screen -A -m -d php make_something.php

0 голосов
/ 11 февраля 2009

То есть вы используете экран, чтобы эксперименты продолжались в фоновом режиме, или как? Если так, то почему бы просто не запустить его в фоновом режиме?

./experiment &

И если вы спрашиваете, как получить уведомление о проделанной мной работе, как насчет связать эксперимент с почтовой командой?

./experiment && echo "the deed is done" | mail youruser@yourlocalworkstation -s "job on server $HOSTNAME is done"
...