나는이 위해 (그것으로 compute.sh 전화를 ROOT 응용 프로그램 (CERN) (root.exe 시작) 및 일부 C를 실행하는 데 사용 ++ 매크로)스크립트 실행 쉘
#!/bin/bash
ROOTSH=/path/to/files root -b -l macro.cpp
$ROOTSH &
ROOT_PID=$!
echo $ROOT_PID > .lock
아래 스크립트 내 자바에서이 보통 .sh를 시작 내가 사용하는 것과 동일한 리눅스 서버에 애플리케이션을 배치 :
try{
Process p = Runtime.getRuntime().exec("/path/to/files/compute.sh");
p.waitFor();
}catch(IOException ex){
log.warn("Cannot find bat or sh to start ROOT");
}catch(InterruptedException ex){
log.warn("The ROOT execution is interrupted");
}
하지만 UI 일부터이의 .sh를 시작하려고 할 때, 나는 아무 것도, 아무 결과없이 오류가 없습니다. 그리고 java 코드 외부에서 .sh를 실행하면 완벽하게 작동합니다.
아무도이 문제를 처리하는 방법을 알고 있습니까? 또는 쉘 스크립트가 java 코드에서 실행되는지 확인하는 다른 방법이 있습니까?
코드를 디버깅하십시오. 'catch' 문이나 메소드의 나머지 부분에 결코 도달하지 않으면 스크립트가 무기한으로 실행됩니다 (아마도 메모리 관련 이유로). 또한 선호되는 방법론은 [ProcessBuilder.start] (https://docs.oracle.com/javase/7/docs/api/java/lang/ProcessBuilder.html#start%28%29)를 사용하는 것입니다. – Mena
또한 작업 디렉토리가 올바른지 확인하십시오. bash 스크립트는이를 설정하지 않으며 Java 코드도 설정하지 않습니다. – Siguza
@Mena : ProcessBuilder.start로 시도했지만,이 경우에는 문제가 해결되지 않습니다. btw, Linux 서버의 tomcat에 내 응용 프로그램의 .war를 설치했습니다. 이 .sh와 동등한이 .bat를 사용하여 로컬 (내 Windows 시스템)에서 디버깅 할 때 제대로 작동했습니다. 리눅스 서버에서 tomcat의 앱 패키지를 추적하는 방법을 알고 계십니까? –