Как составить список запущенных сеансов экрана?

StackOverflow https://stackoverflow.com/questions/537942

Вопрос

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

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

Пока эксперименты выполняются, я могу легко определить, на каких серверах они находятся 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"
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top