SSH를 통해 nohup 명령을 실행 한 다음 연결을 끊습니다.


46

이것을 실행하는 start.sh원격 서버에서 스크립트를 실행하고 싶습니다 .

nohup node server.js &

순진하게, 나는 이것을 다음과 같이 SSH라고 부른다.

ssh myserver <<EOF
./start.sh &
EOF

스크립트가 시작되지만 세션은 연결된 상태로 유지됩니다. 스크립트의 다른 명령 으로이 단계를 따르고 싶기 때문에 좋지 않습니다.

원격 시스템에 SSH로 nohup연결하고 백그라운드에서 명령을 시작한 다음 연결을 끊을 수 있습니까? SSH 프로세스 자체를 백그라운드에 넣을 수 있다고 생각하지만 옳지 않은 것 같습니다.

답변:


40

당신은 이미 올바른 길을 찾았습니다.

참고 : &를 끝에 배치하여 ssh (클라이언트)를 백그라운드에 넣을 수는 있지만 출력은 표시되지 않습니다. 실제로이 작업을 수행하려면 원격 호스트의 응답을 확인해야하는 경우 stdout / stderr를 파일로 경로 재 지정하십시오.

기본적으로 다음 중 한 가지 방법으로 수행 할 수 있습니다.

명령을 직접 실행 {, s}

ssh user@host "nohup command1 > /dev/null 2>&1 &; nohup command2; command3"

또는

ssh user@host "$(nohup command1 > /dev/null 2>&1 &) && nohup command2 >> /path/to/log 2>&1 &"

참고 : &&두 번째 명령을 실행하기 전에 첫 번째 명령에서 0을 반환해야합니다 .

여기에 사용 문서

ssh user@host << EOF
nohup command1 > /dev/null 2>&1 &
nohup command2 >> /path/to/command2.log 2>&1 &
......
EOF

위의 3 가지 옵션이 적합합니다.

또한 여기에 대한 답변을보십시오 : https://askubuntu.com/a/348921/70270


고마워-그래서 내가 빠진 비트는 정말이었다 > /dev/null.
스티브 베넷

실제로 > /dev/null 2>&1는 아닙니다. 블랙홀 lol로 리디렉션하여 stdout / stderr 출력을 폐기하는 것입니다
Terry Wang

5
로그 파일에 쓰려면> 대신 >>를 사용하는 것이 좋습니다. 그렇지 않으면 가장 최근에 실행 한 오류 만 표시됩니다.
Alexis Wilke

nohup command2 >> /path/to/command2.log 2>&1 &터미널 에서처럼 단순히 명령을 시작한 다음 프로세스가 손실 된 터미널을 닫는 것이 올바른가요 ?
Luke

1
@TerryWang 두 번째 예제는 앰퍼샌드와 이중 앰퍼샌드가 함께 작동하지 않습니다. unix.stackexchange.com/q/67006/86716
tsionyx

7

왜 tmux 또는 스크린 만 수행하고 사용하지 않습니까? 예를 들면 다음과 같습니다.

$ tmux new -s SessionNameHere
$ nohup /path/to/your/script.sh

지속적으로 반복되거나 완료되는 데 시간이 걸리는 경우에 유용합니다. 세션 연결을 끊을 수 있으며 활성 상태로 유지됩니다.


2
내가 요구하는 것에 맞지 않습니다. 노트북에서 실행할 수있는 단일 명령으로 연결하고 명령을 포크 한 다음 연결을 끊습니다.
Steve Bennett

3
ssh node "nohup sleep 10 &"

데몬 모드에서 실행되지 않고 ssh 세션을 연결 상태로 유지합니다. nohup을 사용해도 Ssh 세션은 10 초 후에 돌아옵니다.

원격 stdout 및 stderr이 여전히 세션에 연결되어 있기 때문입니다. 그것은 ssh 세션을 살아있게 유지하며 nohup은 도움이되지 않습니다.

이:

ssh node "nohup sleep 10 1>/dev/null 2>/dev/null &"

즉시 반환합니다. nohup으로 원격 프로세스를 시작하고 ssh 세션을 즉시 종료합니다.


이것이 바로 우리의 문제였습니다. 우리는 1> file.log 만 가지고있었습니다. 한 시스템의 ssh가 멈췄습니다. '노드'시스템의 프로세스가 실행 중입니다. 닫는 & 바로 앞에 2> & 1을 추가하면 ssh의 연결이 끊어집니다.
Lee Meador

2

더 짧은 형태 :

ssh host "(command 1; command 2; ...) &>/dev/null &"

bash 자체는 터미널에서 분리를 수행하므로 nohup이 필요하지 않습니다. 우분투 14.04 x86_64, bash 4.3.11을 실행합니다.


1
이것은 질문에 대한 답변을 제공하지 않습니다. 작성자의 의견을 비판하거나 설명을 요청하려면 게시물 아래에 댓글을 남겨주세요. 언제든지 자신의 게시물 에 댓글 수 있으며 평판 이 충분 하면 게시물댓글 수 있습니다 . - 검토에서
데이비드 푀르 스터

작동하지 않는 것 같습니다. nohup; 누락 된 인수에 대한 불만을 출력합니다.
Steve Bennett

@DavidFoerster, 왜 command 1; command 2; ...스크립트 OP를 나타내고 자 하는지 알고 싶습니다. OP는 또한이 답변의 특별한 경우를 사용할 수 있습니다.ssh myserver ./start.sh &>/dev/null &
Alek_A
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.