ssh를 통해 원격 기계에서 nohup을 사용하여 프로세스를 시작하고 싶습니다. 문제는 nohup으로 시작된 프로세스의 PID를 얻는 방법입니다. 그래서 "프로세스는 실제로 뭔가를하고 있습니다", 어떤 외부 쉘 인스턴스가 아닙니다. 또한, 나는 파일의 표준 출력과 표준 에러를 저장하려면,하지만 "그것은 명령의 정확한 PID 나를 메아리되어이 완벽하게nohup으로 시작한 프로세스의 PID를 ssh를 통해 얻습니다.
nohup sleep 30 > out 2> err < /dev/null & echo $!
을 사용하여 작동, 로컬 ... 여기
문제 아니다 sleep 30 ","top "또는"ps aux | grep sleep "을 사용할 수도 있습니다.
하지만 SSH를 통해 원격으로 수행하는 데 문제가 있습니다. 나는 같은 것을 시도했다
ssh remote_machine 'nohup bash -c "((sleep 30) &)" > out 2> err < /dev/null'
그러나 나는 어디에 "echo $!" 그래서 내 로컬 쉘에 표시됩니다. 항상 잘못된 PID를 보여줍니다. 예를 들어 "bash"인스턴스 등.
이 문제를 해결하는 방법에 대한 아이디어가 있습니까?
편집 : OK, "bash -c"는 여기에 필요하지 않을 수 있습니다. Lotharyx 지적처럼, 나는 바로 PID가 잘
ssh remote 'nohup sleep 30 > out 2> err < /dev/null & echo $!'
하지만 다음 문제는 생산 뭔가 "잠 30"를 대체 할 경우 출력, 말, "안녕하세요 에코!"고, 그 출력을 사용하여 얻을 파일에서 "out"으로 끝나는 것이 아니라 로컬 또는 원격 측에서 수행됩니다. 왜 아무 생각 없어?
EDIT2 : 내 잘못! 다른 장치에 공간이 남아 있지 않아 "out"과 "err"파일이 비어 있습니다.
이렇게 작동하고 있습니다. (;) 하나가 세미콜론으로 구분, 행에 여러 명령을 호출하고자하는 경우 또한, 하나는 여전히 같은 "bash는 -c"사용할 수 있습니다
ssh remote 'nohup bash -c "echo bla;sleep 30;echo blupp" > out 2> err < /dev/null & echo $!'
를 그 다음이의 PID를 출력 "bash -c"는 로컬 측에 있습니다. 괜찮습니다. (모든 프로그램 자체가 새로운 서브 프로세스를 생성 할 수 있기 때문에 찾을 수있는 방법이 없습니다 ...)
흠, 당신 말이 맞지만 여전히 stdout에 문제가있는 것 같습니다. 예를 들어, "sleep 30"을 "echo Hello World!"와 같은 출력을 생성하는 것으로 대체하면 "out"파일로 끝나지 않고 PID와 마찬가지로 나에게 반환됩니다. –
"echo foo; sleep 30; echo bar"와 같이 여러 명령을 연속적으로 실행하기 때문에 "bash -c"를 추가 한 것 같습니다. –
내 잘못, 당신의 솔루션은 절대적으로 작동합니다! –