"jsvc"でTomcatをデーモンとして起動する
久しぶりにTomcatをインストールした際、jsvcコマンドの名前を思い出せなかったため備忘録。
jsvc(commons-daemon)でTomcatをデーモン起動
以前は、Tomcatの起動にstartup.sh/shutdown.shをrcスクリプトから呼び出していましたが、
ドキュメントの"Setup"にはjsvc(commons-daemon)が紹介されています。
Tomcat can be run as a daemon using the jsvc tool from the commons-daemon project.
jsvcを利用するメリットは、直接Tomcat(org.apache.catalina.startup.Bootstrap)を 制御(起動・停止)できるため、シンプルな設計になることです。
commons-daemonをコンパイルする
先ほどメリットを説明しましたが、デメリットもあります。それはソースで配布されているため
自身でコンパイルする作業が必要になることです。とはいっても非常に簡単にコンパイルできます。
コンパイルに必要な環境は、gcc、gmake、autoconf、そしてJDKになります。
# yum install gcc make autoconfJDKは使用するJavaによって変わりますが、ここではSun Java SE6 update27をインストールしました。
Download: Java SE - Downloads | Oracle Technology Network | Oracle
# chmod +x jdk-6u27-linux-x64-rpm.bin # ./jdk-6u27-linux-x64-rpm.bin # export JAVA_HOME=/usr/java/default
続いて、Tomcatを展開します。ここでは、Tomcat 6.0.33を使用しました。
# tar xvzf apache-tomcat-6.0.33.tar.gz # mkdir -p /opt/apps # mv ./apache-tomcat-6.0.33 /opt/apps/ # cd /opt/apps # ln -s apache-tomcat-6.0.33 tomcat6
Tomcat6には、"commons-daemon-native.tar.gz"というファイル名でcommons-daemonのソースが添付されています。
# cd /opt/tomcat6/bin # tar xvzf commons-daemon-native.tar.gz # cd /opt/apps/tomcat6/bin/commons-daemon-1.0.7-native-src/unix # ./configure # make # cp jsvc ../..
以上で、コンパイルと配置は完了です。
rcスクリプト
/etc/init.dにrcスクリプトを作成します。なお、内容はソースディレクトリにある"sample/tomcat5.sh"を参考にCentOS5用に作成しました。
# cd /etc/init.d # vi tomcat6
#!/bin/sh # chkconfig: - 80 20 # description: tomcat6 # Source function library. . /etc/init.d/functions JAVA_HOME=/usr/java/default CATALINA_HOME=/opt/apps/tomcat6 DAEMON=$CATALINA_HOME/bin/jsvc TOMCAT_USER=root # for multi instances adapt those lines. TMP_DIR=/var/tmp PID_FILE=/var/run/tomcat.pid CATALINA_BASE=$CATALINA_HOME LOCKFILE=/var/lock/subsys/tomcat CATALINA_OPTS= CLASSPATH=\ $JAVA_HOME/lib/tools.jar:\ $CATALINA_HOME/bin/commons-daemon.jar:\ $CATALINA_HOME/bin/bootstrap.jar start() { # # Start Tomcat # echo -n "Starting Tomcat: " $DAEMON $JSVC_OPTS \ -user $TOMCAT_USER \ -home $JAVA_HOME \ -Dcatalina.home=$CATALINA_HOME \ -Dcatalina.base=$CATALINA_BASE \ -Djava.io.tmpdir=$TMP_DIR \ -wait 10 \ -pidfile $PID_FILE \ -outfile $CATALINA_HOME/logs/catalina.out \ -errfile '&1' \ $CATALINA_OPTS \ -cp $CLASSPATH \ org.apache.catalina.startup.Bootstrap # # To get a verbose JVM #-verbose \ # To get a debug of jsvc. #-debug \ RETVAL=$? if [ $RETVAL = 0 ]; then echo_success touch $LOCKFILE else echo_failure fi echo } stop() { # # Stop Tomcat # echo -n "Shutting Down Tomcat: " $DAEMON $JSVC_OPTS \ -stop \ -pidfile $PID_FILE \ org.apache.catalina.startup.Bootstrap RETVAL=$? if [ $RETVAL = 0 ]; then echo_success rm -f $PIDFILE $LOCKFILE else echo_failure fi echo } case "$1" in start) start ;; stop) stop ;; restart) stop start ;; status) status $DAEMON RETVAL=$? ;; *) echo $"Usage: $0 {start|stop|restart|status}" exit 1 ;; esac
rcスクリプトを作成したら、サービス登録しOS起動時に自動起動するよう設定します。
# chkconfig --add tomcat6 # chkconfig tomcat6 on # service tomcat6 start
コンパイル時にちょっとハマッた件
今回、OSはCentOS5.5 64bit版(CentOS-5.5-x86_64)を使用したのですが、jsvcを実行すると
jsvc error: Cannot find any VM in Java Home /usr/java/defaultなるエラーメッセージが発生し、Tomcatを立ち上げることができませんでした。
原因は、誤って32bit版のJDKをインストールしてしまっていたためでした。 64bit版のJDKを入れなおすことによって回避できます。
参考:http://comments.gmane.org/gmane.comp.jakarta.tomcat.user/206762 以上。