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


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.