Как перечислить текущие сеансы сеанса?

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

  • ssh на сервер XXX
  • запуск screen
  • начать эксперименты на нескольких вкладках
  • отсоединить screen
  • отключиться от сервера

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

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

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

Ответ 1

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

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 для Unix Sockets, завернутых в разрешения файловой системы для управления безопасностью, состоянием и потоками.

Ответ 2

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

Смотрите man

Ответ 3

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

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

Ответ 4

 For windows system

 Open putty 
 then login in server

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

 Screen -ls

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

 screen -x screen id

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

Ответ 5

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

screen -ls

Ответ 6

В большинстве случаев a screen -RRx $username/ будет достаточно:)

Если вы все же хотите перечислить все экраны, тогда поставьте следующее script в вашем пути и вызвать его экран или что угодно:

#!/bin/bash
if [[ "$1" != "-ls-all" ]]; then
    exec /usr/bin/screen "[email protected]"
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 в качестве первого параметра.

Ответ 7

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

$ screen -ls

отобразит сеансы экрана.

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

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

screen -d -r

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

Ответ 8

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

./experiment &

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

./experiment && echo "the deed is done" | mail [email protected] -s "job on server $HOSTNAME is done"