2016-12-12 1 views
1

BAT 파일 (및 linux/unix의 .sh 파일)을 사용하여 Java 프로그램에서 Tomcat을 시작/중지하는 방법을 알고 있습니다. 다음과 같이 이루어집니다 :.bat가 아닌 Java 프로그램에서 Tomcat을 Windows 서비스로 시작/중지하는 방법은 무엇입니까?

String command = "c:\program files\tomcat\bin\startup.bat";//for linux use .sh 
Process child = Runtime.getRuntime().exec(command); 

참고 : 사용 CATALINA_HOME이 코드를보다 동적으로 만들 수 있습니다.

이제 Java 프로그램에서 톰캣의 Windows 서비스을 시작/중지하는 방법을 찾고 있습니다. 내 말은, 내가 시작/Java에서 마치 제어판을 입력하면 마치 ->관리 도구 ->서비스을 입력하고 싶습니다. 이렇게 할 수 있습니까? BAT 파일은 우리가 할 수있는 최대 용량입니까?

나는 질문 start windows service from java을 보았다,하지만 난 다음 "SC"로 그것을 시도 할 때 process.isAlive()는 항상 false하고 있었고, 난 대신 "SC"의 "그물"을 사용하면 다음 process.isAlive() 내가 serviceName = "aliceinwonderland"을 사용하는 경우에도, 항상 true입니다. 코드 샘플 내가 사용 :

//String servicename = "Dhcp"; // real service that exists and started. 
String serviceName = "aliceinwonderland"; // fiction, no such service 
//String[] script = {"cmd.exe", "/c", "sc", "query", serviceName, "|", "find", "/C", "\"RUNNING\""}; 
String[] script = {"cmd.exe", "/c", "net", "query", serviceName, "|", "find", "/C", "\"RUNNING\""}; 
Process process = Runtime.getRuntime().exec(command); 
boolean alive = process.isAlive(); // using "sc" = false; using "net" = true 

답변

0

이 같은 cmd.exe에서 Windows 서비스 컨트롤러 (sc) 명령을 사용할 수 있습니다 톰캣 서비스가 설치 및 Tomcat8 이름이 제공됩니다

String[] script = {"cmd.exe", "/c", "sc", "start", "Tomcat8"}; 
Runtime.getRuntime().exec(script); 

. 설치 지침은 here에서 확인할 수 있습니다.

+0

매우 멋지다! 그것은 작동합니다. –

+0

그리고 Windows 서비스가 실행 중인지 여부를 어떻게 쿼리 할 수 ​​있습니까? 기존 답변을 보았지만 작동하지 않았습니다. 편집 한 질문을 참조하십시오. –

+0

@BinyaminRegev 'process.isAlive'를 사용할 수 없습니다. 왜냐하면 스폰 된 프로세스가 살아 있는지 (즉,'cmd.exe'인지), 당신의 다른 호출에 대한 대답이 왜 다른지는 알지 못하기 때문입니다. 이 스레드에서 서비스 상태를 확인하는 방법에 대해 알아보십시오. https://stackoverflow.com/questions/5388888/find-status-of-windows-service-from-java-application – Shem