SSH 세션 연결이 끊어진 후에도 프로세스 실행 유지

SSH 세션 연결이 끊어진 후에도 프로세스 실행 유지

가끔 집에 가기 전에 장기 실행 프로세스를 시작하고 싶어서 서버에 SSH 세션을 만들어 프로세스를 시작했지만 그런 다음 노트북을 종료하고 집에 가고 싶습니다.

나중에 저녁 식사 후에 퇴근하기 전에 시작한 과정을 다시 살펴보고 싶었습니다. SSH를 사용하여 이 작업을 어떻게 수행할 수 있나요?

제가 이해한 바에 따르면 SSH 연결을 중단하면 서버의 로그인 세션도 중단되어 장기 실행 프로세스가 종료됩니다.

답변1

사용nohup프로세스가 중단을 무시하도록 만들기신호:

$ nohup long-running-process &
$ exit

진행 상황을 모니터링하려면 nohup의 출력을 확인하세요.

$ tail -f nohup.out

답변2

GNU 화면을 사용하고 싶습니다. 정말 훌륭해요!

ssh [email protected]
screen               #start a screen session
run-a-long-process

CTRL+ a, d스크린 세션에서 분리

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

노트북으로 돌아올 때:

ssh [email protected]
screen -r            #resume the screen session

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

screen는 제가 설명한 것보다 훨씬 더 많은 일을 할 수 있는 매우 포괄적인 도구입니다. 화면 세션에서 Ctrl+A를 사용해 보세요. 몇 가지 일반적인 명령을 알아보세요. 가장 일반적인 것은 아마도 다음과 같습니다:

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

답변3

아직 미리 계획하고 설정하지 않은 경우 screen다음을 수행하세요.

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

    [1]+  Stopped                 processName
    
  2. processName백그라운드로 보냅니다 bg %1(뒤에 작업 번호 사용 %). 이 작업은 processName백그라운드에서 다시 시작 됩니다 .

  3. 부인하다 processName그리고 disown %1또는 disown PID. -h현재 쉘을 종료하기 전에 소유권을 유지하려면 이 플래그를 사용하십시오.

답변4

멀티플렉서백그라운드에서 장기 실행 프로세스를 실행하는 데 적합한 선택입니다.

Google Cloud Platform(OS: Ubuntu 16.0)의 VM 인스턴스/서버에서 장기 실행 프로세스를 계속 실행해야 합니다. SSH 터미널을 시작해야 하고 프로세스를 실행하려면 터미널에서 터미널을 연결된 상태로 유지해야 합니다. 지금까지는 너무 좋습니다. 하지만 SSH 터미널 연결이 종료되면 장기 실행 프로세스가 즉시 중지되므로 SSH 터미널에서 다시 시작하거나 새 SSH 터미널에서 다시 실행해야 합니다.

나는 tmux이것이 터미널이 닫힌 후에 실행하려는 프로세스가 종료되는 것을 방지하는 좋은 해결책이라는 것을 알았습니다.

터미널 멀티플렉서( tmux) tmux세션을 시작합니다:

  1. SSH 터미널 시작
  2. 유형 tmux. 동일한 터미널에서 창이 열립니다.
  3. tmux 세션에서 장기 실행 프로세스를 시작하려면 명령을 실행하세요.

이제 SSH 터미널이 갑자기 닫히거나 종료되더라도 tmux 세션은 인스턴스/서버에서 시작된 실행 중인 프로세스를 계속 실행합니다.

연결이 종료되면 어떻게 다시 연결하여 백그라운드 tmux 세션에서 실행 중인 프로세스를 볼 수 있습니까?

  1. 새 SSH 터미널을 다시 연결하거나 엽니다. 이 프로세스를 보려면(백그라운드에서 계속 실행됨) 다음 tmux attach명령을 입력하십시오.

tmux 세션을 종료하려면 다음 안내를 따르세요.

  1. 프로세스를 중지합니다. 그런 다음 exittmux-terminal-window를 입력하세요.

(참고: tmux detach명령을 사용하면 tmux 세션을 종료/중지하지 않고 tmux 세션 창/터미널에서 종료됩니다)

자세한 내용은 다음 문서를 참조하세요.

  1. https://www.tecmint.com/keep-remote-ssh-sessions-running-after-disconnection/
  2. https://limitlessdatascience.wordpress.com/2019/08/22/tmux-to-keep-jupyter-notebook-running-in-the-Background/

관련 정보