У меня есть группа серверов, на которых я запускаю эксперименты с помощью screen
. Процедура следующая:
ssh
на сервер XXXscreen
screen
Во время выполнения экспериментов я могу легко найти, на каких серверах они находятся на ssh
для всех серверов и перечислены мои запущенные процессы (используя top
или ps
).
Однако, как только эксперименты закончены, как я могу найти, на каких серверах у меня открыта сессия экрана (чтобы я мог посмотреть на результат, перезапустить их и т.д.)?
PS: мои эксперименты также печатают выходные данные в файлах... но это не вопрос моего вопроса.
Чтобы просмотреть все сеансы экрана для пользователя, выполните следующую команду в качестве этого пользователя:
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, завернутых в разрешения файловой системы для управления безопасностью, состоянием и потоками.
Команда screen -list может быть тем, что вы хотите.
Смотрите man
В то время как ответ joshperry правильный, я нахожу очень раздражающим, что он не сообщает вам имя экрана (тот, который вы задали с опцией -t), это на самом деле то, что вы используете для идентификации сеанса. (не его вина, конечно, что недостаток экрана)
Вот почему я вместо этого использую script, например: ps auxw|grep -i screen|grep -v grep
For windows system
Open putty
then login in server
Если вы хотите видеть экран в консоли, вам нужно написать команду
Screen -ls
если вам нужно получить доступ к экрану, вы должны использовать команду ниже
screen -x screen id
Напишите PWD
в командной строке, чтобы проверить, в какой папке вы находитесь в настоящее время
Я не уверен в вашем вопросе, но если все, что вам действительно нужно, это список открытых сеансов экрана, попробуйте:
screen -ls
В большинстве случаев a screen -RRx $username/
будет достаточно:)
Если вы все же хотите перечислить все экраны, тогда поставьте следующее script в вашем пути и вызвать его экран или что угодно:
#!/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 в качестве первого параметра.
Несколько человек уже указали, что
$ screen -ls
отобразит сеансы экрана.
Вот еще один трюк, который может быть вам полезен.
Если вы добавите следующую команду в качестве последней строки в .bashrc файл на сервере xxx, то он автоматически подключится к вашему сеанс сеанса при входе в систему.
screen -d -r
Надеюсь, вы сочтете это полезным.
Итак, вы используете экран, чтобы эксперименты работали в фоновом режиме, или что? Если да, почему бы не просто запустить его в фоновом режиме?
./experiment &
И если вы спрашиваете, как получить уведомление о выполненной задаче, как связать эксперимент вместе с почтовой командой?
./experiment && echo "the deed is done" | mail youruser@yourlocalworkstation -s "job on server $HOSTNAME is done"
ls -R /var/run/screen/S-root/ | grep "NamingConvention"
. Экраны сохраняются в формате<pid>.<screen_name>
. Это полезно для скриптов bash. Поэтому, если у вас есть экран с именем0000.NamingConvention
он буквально просто вернет название экранов, которые вы ищете, в удобном для анализа формате.