GNU 화면: 중단된 원격 세션에서 화면을 다시 시작할 수 없습니다.

GNU 화면: 중단된 원격 세션에서 화면을 다시 시작할 수 없습니다.

때때로,SSH 쉘가지다활성 screen세션내 원격 서버로 이동하여부서진(예를 들어 인터넷 회선이 그다지 안정적이지 않음) 세션이 여전히 연결되어 있습니다.

그런 다음 SSH를 통해 다시 서버에 연결했고복원을 시도하다회의 screen:

luis@Zarzamoro:~$ screen -r
There is a screen on:
        9166.pts-2.Zarzamoro    (12/23/15 23:47:34)     (Attached)
There is no screen to be resumed.
luis@Zarzamoro:~$ screen -r 9166.pts-2.Zarzamoro
There is a screen on:
        9166.pts-2.Zarzamoro    (12/23/15 23:47:34)     (Attached)
There is no screen to be resumed matching 9166.pts-2.Zarzamoro.

저는 GNU 화면에 대해 잘 모릅니다.이런 일이 일어날까요?
가능합니까?다시 덮다screen 회의?

답변1

사용:

screen -r -d <pid>.<tty>.<host>

귀하의 경우:

screen -r -d 9166.pts-2.Zarzamoro

그러면 반대쪽 화면이 강제로 분리되어 연결됩니다.

답변2

두 가지 점:

  • 전체 pid + 세션 이름을 지정할 필요는 없습니다(화면합리적인 약어가 허용됩니다.)

  • 이 옵션을 사용하면 더 나은 결과를 얻을 수 있습니다 -x.

~에서매뉴얼 페이지:

-r
세션 소유자/[pid.sessionname]' 복구탁월한스크린 세션.

-x
기존 세션에 연결함께 제공다른 곳(다중 디스플레이 모드). 화면은 자체 내부에서 부착되는 것을 거부합니다. 그러나 여러 화면이 계단식으로 연결되면 루프가 감지되지 않으므로 주의하세요.

답변3

이런 일이 가끔 나에게 일어납니다. 나는 당신의 tty가 화면에서 적절하게 분리되지 않았기 때문에 서버에 다시 연결해도 여전히 화면에 "연결"되어 있다고 생각합니다.

이것이 내가 한 일입니다:

screen -d
screen -r (if you have only one screen)
screen -r <pid> (if you have more than one screen)

너도 할 수 있어

screen -r -d (add <pid> if you have more than one screen)

올바르게 연결되지 않은 스크린을 분리했다가 다시 연결하세요.

또한 이 때 screen -r전체 화면의 이름을 지정할 필요 없이 pid(4자리)만 지정하면 됩니다.

답변4

아래와 같이 자동화할 수도 있습니다.여기기존 screen 세션에 자동으로 다시 연결됩니다(또는 존재하지 않는 경우 새 세션을 만듭니다).

.bashrc

대상 호스트의 ~/.bashrc 상단에 다음 줄을 추가합니다.

# Auto-screen invocation. see: http://taint.org/wk/RemoteLoginAutoScreen
# if we're coming from a remote SSH connection, in an interactive session
# then automatically put us into a screen(1) session.   Only try once
# -- if $STARTED_SCREEN is set, don't try it again, to avoid looping
# if screen fails for some reason.
if [ "$PS1" != "" -a "${STARTED_SCREEN:-x}" = x -a "${SSH_TTY:-x}" != x ]
then
  STARTED_SCREEN=1 ; export STARTED_SCREEN
  [ -d $HOME/lib/screen-logs ] || mkdir -p $HOME/lib/screen-logs
  sleep 1
  screen -RR && exit 0
  # normally, execution of this rc script ends here...
  echo "Screen failed! continuing with normal bash startup"
fi
# [end of auto-screen snippet]

관련 정보