준호씨의 블로그

linux - ssh 리모트 실행을 백그라운드로 돌리기 본문

개발이야기

linux - ssh 리모트 실행을 백그라운드로 돌리기

준호씨 2017. 10. 18. 23:02
반응형

리모트 서버에 백그라운드 작업을 독립적으로 돌리고 싶은 경우 다음과 같이 하면 된다.

ssh junho85.pe.kr 'nohup sleep 20 > /dev/null 2> /dev/null < /dev/null &'

좀 줄이면 다음과 같이 하면 된다.

ssh junho85.pe.kr 'nohup sleep 20 1>/dev/null 2>&1 &'

좀 더

처음엔 단순히 생각해서 다음과 같이 해 볼 수 있다.

ssh junho85.pe.kr 'sleep 20 &'

하지만 실행시키는 호스트 프롬프트가 돌아 오지 않는다.

까짓거 마지막에 또 & 를 붙이면?

ssh junho85.pe.kr 'sleep 20 &' &

당연하게도 실행시키는 호스트에서 ps 로 프로세스 확인 해 보면 해당 작업프로세스가 생긴다.

junho85 17892  1.5  0.0  60044  3984 pts/7    S    22:55   0:00 ssh junho85.pe.kr sleep 20 &

뭐 이정도도 괜찮다면 상관 없는데 여러 호스트로 여러 커맨드를 날리게 되면 점점 프로세스가 많이 쌓이게 되는 단점이 있다.

nohup 을 이용하면 이런 문제를 해결 할 수 있다. 그런데 단순히 nohup 으로는 되지 않고 standard output(1), standard error(2) 를 다른곳으로 리다이렉트 시켜 줘야 된다. 위의 예에서는 /dev/null 로 보내서 흔적을 남기지 않도록 처리 했다.

nohup 이나 file destriptor 등에 더 남겨 보고 싶으나 다음 기회에...

참고

Getting ssh to execute a command in the background on target machine https://stackoverflow.com/questions/29142/getting-ssh-to-execute-a-command-in-the-background-on-target-machine

반응형
Comments