.exec 및 ssh로 인해 Java 프로세스가 중단됩니다.

.exec 및 ssh로 인해 Java 프로세스가 중단됩니다.

편집하다:내 생각에 문제는 SSH 연결이 아직 열려 있는 배경 연결을 생성하고 있다는 것입니다(참조:https://superuser.com/a/617670). 해당 플래그를 사용하여 ssh를 실행하겠지만 -fjava가 설치되어 있는지 확인해야 합니다. 스크립트 자체에서 연결을 강제로 닫는 쉬운 방법이 있습니까?

원격 컴퓨터는 Ubuntu 14.04를 실행하고 있습니다.

나는 다음과 같이 Java를 호출하기 위해 Clojure로 작성된 도구를 사용하고 있습니다 Runtime.getRuntime().exec().

Runtime.getRuntime().exec("ssh", "-o", "StrictHostKeyChecking=no",
    "user@host", "sudo su -");`

그런 다음 생성된 java.lang.Process를 통해 표준 입력을 받아 파일 내용을 여기에 기록합니다. 기본적으로 .flush작성자 .close입니다. 모든 것이 잘 작동합니다. 많은 것들이 문제 없이 발생하지만 처음에는 다음과 같이 실행되는 스크립트가 있습니다.

if [ ! $(which java) ]; then
    apt-get update -q
    apt-get install -y openjdk-7-jre
fi

노드에 수동으로 SSH를 연결하면 Java가 성공적으로 설치되고 프로세스가 종료되는 것을 볼 수 있습니다. 그러나 어떤 이유로 인해 이는 호출 코드(예: 위의 Java 프로세스)에 전달되지 않습니다.

앞서 언급했듯이 이것들은 많이 있는데, 그 중 어느 것도 실패하지 않습니다. 다양한 작업을 수행하는 스크립트가 있지만 위와 거의 동일한 작업을 수행하는 다른 스크립트도 있습니다. 유일한 차이점은 다른 소프트웨어(예: git)를 설치하고 중단되지 않는다는 것입니다.

그래서 수동으로 시도해 보았습니다. 즉, 셸에 들어가서 다음을 입력했습니다.

ssh -o StrictHostKeyChecking=no -o ubuntu@somehost sudo su -

그런 다음 거기에 스크립트를 붙여 넣으면 모든 것이 정상입니다.

원인이 무엇인지 잘 모르겠습니다.

관련 정보