쉘을 닫을 때`scp` 전송이 닫히나요?


29

내가 가진 scp(하나의 원격 서버에서 다른 서버로) 전송, 그것은 매우 큽니다.

따라서이 명령을 실행 한 컴퓨터를 닫으십시오. 전송이 종료됩니까? sshBitwise 프로그램을 사용하여 쉘에 액세스 할 수 있습니다.

답변:


34

여러 가지 솔루션이 있습니다.

프로세스 배경 및 폐기

  1. ssh 터미널을 원격 서버로 엽니 다.
  2. scp평소와 같이 전송을 시작하십시오 .
  3. scp 프로세스의 배경을 지정하십시오 ( Ctrl+ Z, 명령) bg.
  4. 백그라운드 프로세스를 제거하십시오 ( disown).
  5. 세션을 종료하면 ( exit) 원격 시스템에서 프로세스가 계속 실행됩니다.

이 방법의 한 가지 단점은 stdout 및 stderr의 파일 디스크립터에 여전히 ssh 세션의 tty에 대한 참조가 포함된다는 것입니다. 이로 인해 종료하려고하면 터미널이 정지 될 수 있습니다. ~.ssh 클라이언트를 강제로 닫으려면 입력하여이 문제를 해결할 수 있습니다. 이스케이프 시퀀스는 새 줄을 따라야합니다 (참조 ~?). 포기하고있는 프로세스가 stdout 또는 stderr에 쓰는 경우 tty 버퍼가 넘치면 프로세스가 조기에 종료 될 수 있습니다.

스크린 세션 생성 및 분리

GNU Screen 을 사용하면 원격 터미널 세션을 만들 수 있으며 세션에서 로그 아웃 한 후 서버에서 분리하여 계속 실행할 수 있습니다. 그런 다음 나중에 서버에 다시 로그인하여 세션에 다시 연결할 수 있습니다.

  1. ssh를 통해 원격 서버에 로그인하십시오.
  2. 스크린 세션을 시작하십시오 screen -D -R <session_name>.
  3. scp평소와 같이 전송을 시작하십시오 .
  4. Ctrl+ A를 사용 하여 화면 세션을 분리하십시오 d.
  5. ssh 세션 종료 ( exit)

세션에 다시 연결하려면 다음을 수행하십시오.

  1. ssh를 통해 원격 서버에 로그인하십시오.
  2. 스크린 세션에 다시 연결하십시오. screen -D -R <session_name>

끊지 않고 명령 실행

를 사용하여 답변을 참조하십시오 nohup.

작업 스케줄러 사용

자동화하려는 정기적 인 작업 인 경우이 방법이 가장 좋습니다.

사용 crontab, at또는 batch전송을 예약합니다.


안녕하세요 Damien, 다양한 답변과 형식 지정에 감사드립니다. 하지만 왜 -D -R플래그를 시작으로 지정했는지 명확하게 밝히기를 원했습니다 screen. 맨 페이지를 읽고 이해하는데 도움이되지 않았습니다. -D -R Attach here and now. ...
hello_there_andy

@hello_there_andy 매뉴얼에는 -DR의 기능이 명확하게 나와 있습니다. 기본적으로 Screen 세션이 이미 실행중인 경우 사용자가 SSH를 통해 로그인 한 경우에도 새 세션을 생성하지 않고 다시 연결하여 세션을 종료합니다. 나쁜 네트워크 연결).
데미안 Ó Ceallaigh

1
세션 이름을 지정하는 것은 선택 사항입니다.
Damien Ó Ceallaigh

좋아, 나는 이해한다고 생각하지만, 나는 그것이 잘못되었다고 생각했을 것입니다 screen -r <session>... 그래서 그것들을 쫓아 낼 수 있다는 점 -DR과 다릅니다 -r. 다른 사용자가있는 경우 다시 연결하고 실패하지 않습니다.
hello_there_andy

나는 확실하게 테스트를했다. -D는 기존 화면 세션을 분리하는 것 외에도 SSH 연결을 닫고 (사용자를 로그 아웃) 것을 제외하고 -d의 기능을 수행합니다. -r 세션을 다시 연결합니다. -R은 기존 세션을 다시 연결하지만 세션이 존재하지 않으면 새 세션을 만듭니다 (-r을 다시 연결할 세션이 없으면 실패 함). 따라서 이전 설명에서 약간 부정확했습니다.
Damien Ó Ceallaigh

10

를 사용할 수 있습니다 nohup(1). 즉, 다음과 같은 작업을 수행 할 수 있습니다.

nohup scp alice@source:/the/answer/of/all bob@target.example.com:/var/tmp/42 &

의 출력이 생성됩니다 nohup.out. 그러면 안전하게 로그 아웃 할 수 있습니다.


&끝에 나를 위해 차이를 만들어! 감사!
winklerrr

6

예, 종료됩니다. 연결없이 터미널 세션을 유지하는 솔루션은 다음과 screen같습니다.

SCREEN(1)                                                            SCREEN(1)

NAME
       screen - screen manager with VT100/ANSI terminal emulation

SYNOPSIS
       screen [ -options ] [ cmd [ args ] ]
       screen -r [[pid.]tty[.host]]
       screen -r sessionowner/[[pid.]tty[.host]]

DESCRIPTION
       Screen is a full-screen window manager that multiplexes a physical ter‐
       minal between several processes (typically interactive  shells).   Each
       virtual terminal provides the functions of a DEC VT100 terminal and, in
       addition, several control functions from the ISO 6429  (ECMA  48,  ANSI
       X3.64)  and ISO 2022 standards (e.g. insert/delete line and support for
       multiple character sets).  There is a  scrollback  history  buffer  for
       each virtual terminal and a copy-and-paste mechanism that allows moving
       text regions between windows.

2

위에서 말한 것처럼 screen 명령을 사용할 수 있습니다.

  • 화면 만들기

user@server:~$ screen -S bigscptransfer

  • 당신은 지금 화면에 있습니다

ser@server:~$ scp bigfile.dat server2:.

  • CTRL+ A를 사용하여 화면에서 분리 한 다음D

[detached from 5899.bigscptransfer]

  • 필요한 경우 세션을 재개하십시오.

user@server:~$ screen -r bigscptransfer


-1

nohup scp shinto @ source : / home / data roose@target.example.com : / var / tmp / file

명령을 일시적으로 중지

CTRL + Z

명령을 배경에 넣고 다음을 입력하십시오.

bg

요 프로세스를 확인할 수 있습니다 :

직업

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