2008-09-26 4 views
2

저는 Hudson을 종속 서비스가없는 Tomcat을 통해 Windows 서비스로 실행하고 있습니다. 작업의 마지막 빌드 단계는 일부 Java 코드를 호출하는 배치 파일입니다. 이 코드는 PostgreSQL의 명령 행 도구 인 psql (Runtime.exec()을 통해)을 사용하여 로컬 시스템에 데이터베이스를 작성하고 결국 일부 테스트를 실행합니다.Runtime.exec에서 Hudson 작업이 중단됩니다.

작업이이 시점으로 진행된 다음 데이터베이스를 만들지 않고 무기한 정지됩니다. 명령 줄에서 배치 파일을 실행하면 완벽하게 작동합니다. http://hudson.gotdns.com/wiki/display/HUDSON/Spawning+processes+from+build이 적용되는 것으로 생각하지 않습니다. 스폰 된 프로세스가 실행을 시작한 것처럼 보이지는 않지만 새로운 문제이므로 잘못된 것이라면 알려주십시오.

편집 @anjanb는 : 배치 파일의 유일한 목적은 자바 코드를 호출하는 것입니다, 유일한 사용자 입력 내가 직접 빌드의 콘솔 출력을 통해에가는 볼 수있는 명령 줄 인수로 전달되고있다.

프로세스 탐색기는 psql이 시작되고 있지만 분명히 실행되지 않고 있습니다. psql이 제공하는 첫 번째 명령은 새 데이터베이스를 만드는 것이지만 아직 일어나지 않습니다.

편집 2 : 허드슨 사용자 메일 링리스트에서 몇 가지 팁을 얻었으니 월요일에 시도하고 다시보고하겠습니다.

편집 3 : 자바 코드가 이미 출력 스트림을 소비하고 있었기 때문에 코드를 개발할 때이 기사를 사용했습니다. 무슨 일이 일어나는지 알 수 없으므로 psql과 Runtime.exec()에 의존하는 대신 JDBC를 사용하여 데이터베이스를 만드는 코드를 재개발합니다.

답변

0

프로그램이 대기 중일 가능성이 있습니다 일부 사용자 입력. 서비스가 사용자 입력을 허용하도록 구성되지 않은 경우 서비스가 중단 된 것처럼 보입니다.

사용자 입력 (GUI)을 허용하도록 서비스를 구성하면 도움이 될 수 있습니다.

또한 Sysinternals ProcessExplorer 및 ProcessMonitor를 실행할 수 있습니다. 이들은 .BAT 작업이 중지 된 위치를 찾을 수 있습니다.

3

프로세스의 출력을 읽으십니까? OS 버퍼가 처리 할 수있는 것보다 많은 출력을 생성하는 경우, 그것을 읽어야합니다. ...

또한 일부 프로세스는 입력이 완료 될 때까지 대기합니다. 프로세스를 시작한 후 process.getInputStream(). close()를 호출 해보십시오.

아마도이 기사도 흥미 롭습니다. "Runtime.exec()이 실행되지 않을 때"라고합니다 : http://www.javaworld.com/javaworld/jw-12-2000/jw-1229-traps.html?page=2

+0

그건 훌륭한 리소스입니다. 코드 자체를 작성할 때 사용했습니다. 교수형에 처해 있었지만 적어도 지금은 DB를 만들기 시작했습니다. – rjohnston

관련 문제