Как перечислить текущие сеансы сеанса?
У меня есть группа серверов, на которых я запускаю эксперименты с помощью 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"