실행중인 화면 세션을 나열하는 방법은 무엇입니까?


233

를 사용하여 실험을 실행하는 서버가 많이 있습니다 screen. 절차는 다음과 같습니다.

  1. ssh 서버 XXX
  2. 시작하다 screen
  3. 몇 개의 탭에서 실험을 시작하십시오
  4. 떼다 screen
  5. 서버에서 분리

실험이 진행되는 동안 ssh모든 서버에 연결하고 실행중인 프로세스 ( top또는 사용 ps) 를 나열 하여 어떤 서버에서 있는지 쉽게 찾을 수 있습니다 .

그러나 실험이 끝나면 화면 세션이 열려있는 서버를 어떻게 찾을 수 있습니까 (출력을보고 다시 시작할 수 있는지 등)?

추신 : 내 실험은 결과를 파일로 인쇄합니다 ... 그러나 이것은 내 질문의 요점이 아닙니다.

답변:


420

사용자의 모든 화면 세션을 나열하려면 해당 사용자로 다음 명령을 실행하십시오.

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 소켓을 상당히 훌륭하게 Unixy로 사용하는 것입니다.


1
질문에 완벽하게 답변 한이 답변이 왜
다운 보트를

또는 명명 규칙에 따라 특정 화면을 얻으려면 결과를 grep 할 수 있습니다. ls -R /var/run/screen/S-root/ | grep "NamingConvention". 화면은 <pid>.<screen_name>형식으로 저장 됩니다. 이것은 bash 스크립트에 유용합니다. 따라서 이름이있는 화면이 있다면 0000.NamingConvention문자 그대로 구문 분석하기 쉬운 화면의 이름을 문자 그대로 반환합니다.
Elias Ranz


13

joshperry의 대답은 정확하지만 화면 이름 (-t 옵션으로 설정 한 이름)을 알려주지 않으므로 실제로 세션을 식별하는 데 사용하는 것이 매우 귀찮습니다. (물론 그의 잘못은 화면의 결함이 아닙니다)

그렇기 때문에 대신 다음과 같은 스크립트를 사용합니다. ps auxw|grep -i screen|grep -v grep


2
-S 옵션을 살펴보십시오. 제공된 값은 유닉스 소켓 파일 이름에 저장되며 ls출력 에서 볼 수 있습니다 . 필요한 경우 -t 옵션도 유지할 수 있습니다.
joshperry

-S 옵션은 세션 이름으로 다시 시작할 수 있기 때문에 훌륭합니다.screen -rd <sessionname>
jorisw

7

나는 정말로 당신의 질문을 확신하지 못하지만, 정말로 원하는 것이 현재 열린 스크린 세션 목록이라면, 다음을 시도하십시오.

screen -ls

6
 For windows system

 Open putty 
 then login in server

콘솔에서 화면을 보려면 명령을 작성해야합니다

 Screen -ls

화면에 액세스 해야하는 경우 아래 명령을 사용해야합니다

 screen -x screen id

PWD현재 어떤 폴더에 있는지 확인하기 위해 명령 줄에 작성


3

대부분의 경우 screen -RRx $username/의지는 충분합니다 :)

여전히 모든 화면을 나열하려면 다음 스크립트를 경로에 넣고 화면 또는 원하는대로 호출하십시오.

#!/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 옵션을 첫 번째 매개 변수로 제공 할 때 모든 화면 세션을 표시하는 것을 제외하고는 화면과 정확히 동일하게 작동합니다.


3

여러 사람들이 이미 지적했다

$ screen -ls

스크린 세션을 나열합니다.

당신에게 유용한 또 다른 트릭이 있습니다.

서버 xxx에서 .bashrc 파일 의 마지막 행으로 다음 명령을 추가하면 로그인시 화면 세션에 자동으로 다시 연결됩니다.

screen -d -r

도움이 되길 바랍니다.


1
화면을 시작한 동일한 사용자로 로그인해야하는데 화면 세션이 사라질까 걱정했지만 파일 복사가 사용자 "미디어"아래에서 계속되고 있습니다. 논리적으로 들릴지 모르지만 그것을 감독하면 공황을 줄일 수 있습니다.
Paul

0

추신 x | grep SCREEN

명령을 사용한 경우 화면이 어떻게 실행되는지 확인

화면 -A -m -d php make_something.php


-4

실험을 백그라운드에서 계속 실행하기 위해 화면을 사용하고 있습니까? 그렇다면 왜 백그라운드에서 시작하지 않습니까?

./experiment &

그리고 내가 한 일을 통보받는 방법을 묻는다면 메일 명령으로 실험을 묶는 것은 어떻습니까?

./experiment && echo "the deed is done" | mail youruser@yourlocalworkstation -s "job on server $HOSTNAME is done"

실험을 종료하지 않고 서버에서 연결을 끊을 수 있도록 화면을 사용하고 있습니다. 문제는 알림을받는 방법이 아니라 (메일이 메일을 보내는 좋은 방법 일 수 있음) 주어진 시스템에 열린 스크린 세션이 있는지 확인하는 방법이었습니다. 어쨌든 답변 주셔서 감사합니다!
Wookai

나는 경험이 풍부한 sysadmin은 아니지만 화면을 사용하여 서버 프로세스를 실행하는 것이 좋습니다. 문제가 발생하면 해당 창으로 넘기고 문제를 일으킨 모든 출력을 볼 수 있습니다. 로그 파일 열기를 시작하십시오. 또한 ctrl + c로 프로세스를 쉽게 종료 할 수 있음을 의미합니다. 동일한 서비스를 자주 시작하고 종료하는 경우 편리합니다.
Steve Bennett
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.