Как составить список запущенных сеансов экрана?
-
22-08-2019 - |
Вопрос
У меня есть куча серверов, на которых я провожу эксперименты, используя screen
.Процедура заключается в следующем :
ssh
на сервер XXX- запуск
screen
- начните эксперименты на нескольких вкладках
- отсоединить
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, обернутых в разрешения файловой системы, для обработки безопасности, состояния и потоков.
Другие советы
Команда экранный список может быть, это то, чего вы хотите.
Смотрите на человек
Хотя ответ джошперри верен, я нахожу очень раздражающим то, что он не сообщает вам название экрана (то, которое вы задаете с помощью опции -t), которое на самом деле используется для идентификации сеанса.(конечно, не его вина, это недостаток экрана)
Вот почему я вместо этого использую такой скрипт, как этот: ps auxw|grep -i screen|grep -v grep
Я не совсем уверен в вашем вопросе, но если все, что вам действительно нужно, - это просмотреть текущий сеанс экрана, попробуйте:
screen -ls
For windows system
Open putty
then login in server
Если вы хотите видеть экран в консоли, то вам нужно написать команду
Screen -ls
если вам нужно получить доступ к экрану, то вы должны использовать приведенную ниже команду
screen -x screen id
Написать PWD
в командной строке, чтобы проверить, в какой папке вы находитесь в данный момент
В большинстве случаев a screen -RRx $username/
будет достаточно :)
Если вы все еще хотите отобразить список всех экранов, поместите следующее script в свой path и назовите его 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 в качестве первого параметра.
Многие люди уже указывали на это
$ screen -ls
будет перечислен список сеансов просмотра экрана.
Вот еще один трюк, который может быть вам полезен.
Если вы добавите следующую команду в качестве последней строки в вашем .bashrc файл на сервере xxx, затем он автоматически повторно подключится к вашему сеанс просмотра экрана при входе в систему.
screen -d -r
Надеюсь, вы найдете это полезным.
ps x | grep ЭКРАН
чтобы увидеть, что это за экран, запущенный в случае, если вы использовали команду
экран - A - m -d php make_something.php
Итак, вы используете screen для продолжения экспериментов в фоновом режиме, или что?Если да, то почему бы просто не запустить его в фоновом режиме?
./experiment &
И если вы спрашиваете, как получать уведомления о проделанной мной работе, как насчет того, чтобы объединить эксперимент с почтовой командой?
./experiment && echo "the deed is done" | mail youruser@yourlocalworkstation -s "job on server $HOSTNAME is done"