연결 해제 후 SSH 세션 실행 유지


208

집에 가기 전에 시작해야 할 프로세스가 오래 실행되기 때문에 프로세스를 시작하기 위해 서버에 SSH 세션을 만들지 만 랩톱을 닫고 집에 가서 저녁 식사 후 나중에 가고 싶습니다. 퇴근 전에 시작한 과정을 확인하십시오. SSH로 어떻게 할 수 있습니까? 내 이해는 SSH 연결을 끊으면 서버에서 로그인 세션도 중단되므로 장기 실행 프로세스가 중단된다는 것입니다.

답변:


205

nohup프로세스가 행업 신호를 무시하도록하는 데 사용하십시오 .

$ nohup long-running-process &
$ exit

20
이거 야. 스크린이나 tmux를 설치할 필요가 없습니다. 이것은 실제로 그것을하는 좋은 오래된 방법입니다. 물론 '스크린'또는 'tmux'는 모두 멋진 앱이며 필요할 때 사용해야하지만 로그 아웃 할 수있는 백그라운드에서 프로세스를 실행하는 것만 큼 간단합니다.
reiche

2
nohup은 disown과 같은가요?
cjac

28
그들은 비슷한 목적을 가지고 있지만 여러면에서 다릅니다. nohupSIGHUP을 가로 채서 실행 된 쉘이 종료되고 SIGHUP을 여전히 실행중인 모든 자식에게 보내면 long-running-process죽지 않습니다. disownBash의 자식 목록에서 지정된 작업을 제거하기 만하면 SIGHUP을 전혀 보내려고하지 않습니다. nohup쉘과 분리 된 프로그램이므로 모든 쉘과 작동하지만 disownBash 내장 프로그램입니다. 작업을 시작한 후에 만 ​​작업 nohup을 실행 disown하고 셸로 돌아갈 수 있도록 백그라운드 에서 실행되도록 명령을 실행할 수 있습니다.
Warren Young

3
nohup 및 disown에 익숙하지 않은 사용자를위한 멋진 빠른 검토-터미널 세션을 처리하는 쉬운 방법 serverwatch.com/tutorials/article.php/3935306/…
Dan

7
tail -f nohup.out돌아 왔을 때 무슨 일이 일어나고 있는지 확인합니다.
Ricardo Stuven

141

GNU Screen을 사용하고 싶습니다. 정말 대단해!

ssh me@myserver.com
screen               #start a screen session
run-a-long-process

CTRL+ a, d화면 세션에서 분리

exit                 #disconnect from the server, while run-a-long-process continues

랩톱으로 돌아올 때 :

ssh me@myserver.com
screen -r            #resume the screen session

그런 다음 장기 실행 프로세스의 진행 상황을 확인하십시오!

screen매우 포괄적 인 도구이며 내가 설명한 것보다 더 많은 것을 할 수 있습니다. 스크린 세션 중에 ctrl + a? 몇 가지 일반적인 명령을 배울 수 있습니다. 아마도 가장 일반적인 것은 다음과 같습니다.

  • CTRL+ a, c새 창을 만들 수 있습니다
  • CTRL+ a, n화면 세션에서 다음 창으로 전환
  • CTRL+ a, p화면 세션에서 이전 창으로 전환
  • 여러 시스템에서 로그인하면 실수로 다른 컴퓨터의 활성 화면 세션에 연결되어있을 수 있습니다. 이런 이유로 항상 screen -d -r다른 셸을 화면 세션에 연결 한 경우 현재 시스템에서 다시 시작하기 전에 분리 할 수 ​​있도록 다시 시작합니다.

8
tmux는 현대적인 화면 아날로그입니다.
zvolkov

현대에 대해서는 모르겠지만 기본 키 접두어 tmux (Ctrl + b)는 키를 bash / emacs하는 데 도움이됩니다.
sajith

2
어떤 이유로 공유 터미널을 원한다면 화면이 매우 멋집니다. 화면을 screen -S name만들고 다른 친구가에 연결하십시오 screen -x name.
Patrick

1
tmuxwith tmuxinator는 멋진 설정을위한 훌륭한 조합이며 screen, 빠르고 간단한 솔루션으로 선호 합니다.
earthmeLon

이 답변이 가장 좋습니다. 좋아합니다. 훌륭한 연구
Jaffer Wilson

42

미리 계획하고 설정 screen하지 않은 경우 다음을 수행하십시오.

  1. 프로세스가 백그라운드에서 실행중인 경우 : # 3으로 이동하고 그렇지 않으면 : Ctrl-Z포 그라운드 프로세스를 일시 중단합니다. 정지 된 프로세스의 작업 번호를보고합니다. 예를 들면 다음과 같습니다.

    [1]+  Stopped                 processName
    
  2. (# 다음에 오는 작업을 사용하여)을 processName배경으로 보냅니다 . 백그라운드에서 다시 시작 됩니다.bg %1%processName

  3. 부인 processNamedisown %1disown PID. -h현재 쉘을 종료 할 때까지 소유권을 유지 하려면 플래그를 사용하십시오 .


5
감사합니다! 나는 일을 &시작했고 그것을 시작할 때 사용하지 않았기 때문에 그것을 계속 유지할 수 없을 것이라고 생각 했다. 이것은 잘 작동하는 것 같습니다!
Matt

4
이것은 놀랍다! 나는 리눅스가 당신에게 이와 같은 활성 프로세스의 제어권을 옮길 수 있다는 것을 결코 알지 못했습니다. 장기 실행 프로세스 중에 SSH를 서버에 연결하는 동안 배터리가 방전 될까봐 걱정이되었습니다.
명왕성

14

사용하려는 것은 화면 또는 byobu라는 화면 주위의 사용자 친화적 인 래퍼입니다.

Screen을 사용하면 동일한 ssh 세션에서 여러 가상 터미널 세션을 실행할 수 있습니다. 자습서도움말 페이지를 사용할 수 있습니다.

byobu 는 ctrl-a의 키 조합 대신 간단한 기능 키를 사용하여 새 화면을 쉽게 열 수있는 래퍼입니다. 또한 이름을 지정할 수있는 모든 열린 가상 터미널이있는 상태 표시 줄도 보여줍니다.

또 다른 좋은 기능은 ssh 연결이 끊긴 동안 모든 화면을 유지할 수 있다는 것입니다. ssh를 통해 다시 연결하고 byobu를 호출하면 모든 것이 이전과 같습니다.

마지막 으로 byobu의 일부 스크린 샷 .


Byobu Terminal 내 서버에서 프로세스를 실제로 알지 못하고 프로세스를 시작했습니다 (방금 전에 본 적이 없으므로 터미널을 검색하고 Byobu를 클릭했습니다). Byobu는 하단에 화려한 상태 표시 줄이 있었기 때문에 계속 사용했으며 시원하다고 생각했습니다. 오늘은 SSH를 통해 해당 터미널 세션에 원격으로 액세스하려고한다는 것을 알았습니다. 내가해야 할 일은 "byobu"를 입력하는 것이었고 터미널 세션을 바로 보여주었습니다. 나는 byybu를 우연히 발견해서 정말 기뻐요!
nick

8

주목할 가치가 있습니다.

ssh -t lala screen -rxU moo호스트 lalamoo 세션에 연결됩니다

ssh -t lala screen -S moo호스트 lala 에서 moo 세션을 생성합니다.

ssh -t lala screen -S moo quux호스트 lala 에서 moo 세션을 생성하고 quux 프로그램을 실행하여 완료시 세션을 종료합니다.


3

오래된 질문, 이상한 여전히 아무도 ntms 의 래퍼 역할을하고 필요할 때까지 열어 두는 tmux를 조언하지 않았습니다 . 이것은 tmux가 가지고있는 많은 기능 외에 더 많은 제어를 허용합니다. 관리하기 쉽고, tmux를 실행하기 만하면 셸에서 쉘을 가져 와서 작업을 시작한 다음 ctrl + b와 d (detach) ctrl+b를 차례로 누름 (tmux의 "ok google"이며 닫는 d명령입니다) 쉘에서 나가지 않고). 예를 들어 퍼티를 닫으면 실제로 작동합니다. 저녁 식사 후 다시 연결하면 tmux를 다시 열어 tmux attach화면을 그대로 그대로 볼 수 있습니다. 내가 좋아하는 것이 분할 창입니다. ctrl+b그런 다음을 누릅니다 ". 한 창에서 다른 창으로 변경 한 ctrl+b다음 위 / 아래 화살표를 누릅니다.


3

좋은 가이드는 여기에서 찾을 수 있습니다. 연결을 끊을 때 SSH 세션을 계속 실행 하십시오.

sudo apt-get install screen

이제 명령 행에 screen을 입력하여 새 화면 세션을 시작할 수 있습니다. 화면에 대한 정보가 표시됩니다. Enter 키를 누르면 정상적인 프롬프트가 표시됩니다.

연결을 끊으려면 (그러나 세션을 실행 상태로 두십시오)Ctrl + A를 누른 다음 Ctrl+ D를 연속으로 누르십시오 . [분리됨] 메시지가 표시됩니다

이미 실행중인 세션에 다시 연결하려면

screen -r

기존 세션에 다시 연결하거나없는 경우 새 세션을 만들려면

screen -D -r

실행중인 화면 세션의 내부에 새 창을 만들려면 히트 Ctrl+ AC즉시 연속. 새로운 프롬프트가 나타납니다.

한 화면에서 다른 화면으로 전환하려면Ctrl + A를 누른 다음 Ctrl+ A를 연속해서 누르십시오 .

열린 화면 창을 나열하려면 히트 Ctrl+ AW즉시 연속을


<kbd>Ctrl</kbd>이름을 키보드 키로 표시하는 데 사용할 수 있습니다 .
Tomasz

1

나는 NX NoMachine을 사용하는데, 이는 나뿐이기 때문에 무료입니다. 기본적으로 서버에서 X 세션을 실행하여 연결하거나 연결을 끊을 수 있습니다. 연결되어 있지 않아도 X 세션은 계속 실행됩니다. 어디에서나 연결할 수 있습니다. 플로팅 창 또는 전체 데스크탑 (예 : 완전한 Gnome 데스크탑)을 포함하는 단일 창 중에서 선택할 수 있습니다. 클라이언트 (노트북에서 실행할)는 Linux, MacOS, Solaris 또는 Microsoft Windows에서 실행할 수 있습니다. 후자의 경우 부동 창을 선택하면 Windows 작업 표시 줄에 개별적으로 나타납니다.

NX Nomachine을 사용하는 두 Linux 서버의 프런트 엔드로 Windows XP 랩톱 (필요한 특정 Windows 관련 하드웨어에 필요)을 사용합니다. Linux에서 Windows 랩톱에 연결된 프린터로 인쇄 할 수도 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.