run Tomcat as a Daemon

07.Web 2012.07.03 16:01


tomcat을 시작 후 shutdown.sh 종료하는 경우는 stop관련 log가 출력이 된다. (catalina.log)

만약 kill (kill -9 말고)로 ps를 죽이게 된다면 어떻게 될까?


답은, 역시 stop관련 log가 출력이 된다.


이유가 뭘까 싶어 좀 찾아봤다. 해답은,


Runtime.getRuntime().addShutdownHook(shutdownHook);


이 코드였다.shutdown hook을 추가하게 되면 tomcat jvm의 종료가 되는 시점에 shutdownHook의 객체(Thread 타입)가 실행되기 때문에 필요한 종료동작 및 logging 후 안전히 프로세스를 종료하게 된다.



여기서 한가지 의문이 더 들었다.


tomcat의 경우 apache commons daemon lib가 동봉되어 있어 daemon형태로 돌리기 위해서는

jsvc를 통해 구동을 하면 된다고 알고 있는데 자체적으로 shutdown hook 메커니즘이 있는데도

별도로 이렇게 하는 이유는 뭘까? 

(물론 kill -9은 jsvc든 shutdownhook이던 전부 operational signal을 catch할 수 없다.)


daemon이란 

-유닉스와 같은 멀티태스킹 운영체제에서 데몬(daemon, 발음: 데이먼/'de?m?n/ 또는 디먼 /'dim?n/[1])은 

사용자가 직접적으로 제어하지 않고, 백그라운드에서 돌면서 여러 작업을 하는 프로그램을 말한다.


tomcat의 경우 기본 port(8080)이 아닌 다른 포트, 예를들어 privilege port(under 1024, 예) HTTP 80)를

사용하기 위해서는 root 권한이 필요한데 이런 경우 jsvc를 통해 root가 아닌 user로

대신 daemon으로 등록할 수 있다.



그렇다면, 기본 포트를 사용할 것이고, httpd와 연동을 할 계획이라면 어떻게 해야하나?


요건 다음번에.......


<출처>

http://stackoverflow.com/questions/11147853/value-of-adding-commons-daemon-to-an-app

http://christopherhunt-software.blogspot.kr/2009/07/replacing-jsvc-for-java-daemons.html

http://fnords.wordpress.com/2010/04/22/tomcat-improvements-coming-up-in-10-04/

신고
Posted by Stewie


티스토리 툴바