SSH를 통해 nohup 명령을 실행 한 다음 연결을 끊습니다. 서버에서 스크립트를 실행하고 싶습니다 . nohup

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

nohup node server.js &

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

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

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

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



답변

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

참고 : &를 끝에 배치하여 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


답변

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

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

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


답변

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 세션을 즉시 종료합니다.


답변

더 짧은 형태 :

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

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