Apache Tomcat の起動スクリプトのテンプレート
Tomcatをインストールする際にいつも困るのが、Tomcatのパッケージには起動スクリプトのサンプルがついていない事です。 ここでは、私がいつも書いている起動スクリプトを晒してみようと思います。
ちなみに私の環境は、 CentOS, Tomcat 6.0.xx です。
前提
- Tomcatは /usr/local/tomcat にインストールしたものとします
- Tomcatは、tomcat というLinuxユーザーで動かす事とします
- インストール時にTomcatの起動に必要な環境設定を行う /etc/profile.d/tomcat.sh を書いたこととします (※1)
- 起動スクリプトは root により起動される事とします
- 起動スクリプトは /etc/rc.d/init.d/tomcat というファイルとします
※1 : 「Tomcatの起動に必要な環境設定」とは以下のようなコードです。
export JAVA_HOME=/usr/java/default
export PATH=$PATH:$JAVA_HOME/bin
export CLASSPATH=.:$JAVA_HOME/jre/lib:$JAVA_HOME/lib:$JAVA_HOME/lib/tools.jar
export TOMCAT_HOME=/usr/local/tomcat
export CATALINA_HOME=/usr/local/tomcat
export CLASSPATH=$CLASSPATH:$CATALINA_HOME/common/lib
起動スクリプトの作成
テキストエディタで /etc/rc.d/init.d/tomcat を新規に追加します。(ここでは vi を利用)
# vi /etc/rc.d/init.d/tomcat
ファイルには以下のコードを記述します
#!/bin/bash
# source function library
. /etc/rc.d/init.d/functions
source /etc/profile.d/tomcat.sh
start(){
if [ -z $(/sbin/pidof java) ]; then
echo "Starting tomcat"
sudo -u tomcat /usr/local/tomcat/bin/startup.sh
touch /var/lock/subsys/tomcat
else
echo "tomcat is already running"
fi
}
stop(){
if [ ! -z $(/sbin/pidof java) ]; then
echo "Shutting down tomcat"
sudo -u tomcat /usr/local/tomcat/bin/shutdown.sh
until [ -z $(/sbin/pidof java) ]; do :; done
rm -f /var/lock/subsys/tomcat
else
echo "tomcat is not running"
fi
}
case "$1" in
start)
start
;;
stop)
stop
;;
restart)
stop
start
;;
status)
/usr/local/tomcat/bin/catalina.sh version
;;
*)
echo "Usage: $0 {start|stop|restart|status}"
esac
exit 0
作成し終えたら、作成した起動スクリプトに実行権限を付けて完成です。
# chmod +x /etc/rc.d/init.d/tomcat
Tomcatの起動と停止 (動作確認)
以下のコマンドで起動、停止をして動作確認をしてください。
起動
# /etc/rc.d/init.d/tomcat start
停止
# /etc/rc.d/init.d/tomcat stop
尚、前提に書いた通り、ここでは tomcat というユーザーで tomcat を起動しています。 もし root で tomcat をインストールしている場合、ログや一時ファイルの書き込み権限がなくて起動しない場合があります。 インストールした tomcat ファイルやフォルダの所有者を tomcat ユーザーにしておくことを忘れないでください。 またはログファイルや一時ファイルの出力先を tomcat ユーザーが書き込みできる別の領域にするようにしてください。
解説
上記スクリプトを少し解説します。まず4~5行目。
. /etc/rc.d/init.d/functions
source /etc/profile.d/tomcat.sh
ここでは環境変数を読み込んでいます。 上記の前提の3つ目に「インストール時に /etc/profile.d/tomcat.sh に Tomcat の起動に必要な環境設定を行うシェルを書いたこと」と書きましたが、/etc/profile.d/tomcat.sh に書かずに、5行目に環境変数の設定を記述しても構いません。要は処理を外部ファイルにしたかどうかだけです。 但し、RedHat系のLinux OS では /etc/profile.d にアプリケーションごとの固有の設定を切り分けて置く風習があるので、Tomcatの環境設定は /etc/profile.d 配下に置くことをおすすめします。
次に関数宣言をしています。ここでは start という関数と、stop という関数を宣言しています。
その後の case 以降の行がメイン処理で、起動スクリプトの引数($1)の文字列により処理分岐して、引数($1)が start という文字列なら上記で宣言した start という関数を呼び出し、引数($1)が stop という文字列なら上記で宣言した stop という関数を呼び出しています。
終わりに・・・
私は上記のスクリプトを基礎にして、プロジェクトごとにカスタマイズした起動スクリプトを記述しています。 tomcat の起動ユーザーや、tomcat 起動時の環境変数などは、皆様それぞれで必要な記述を追加してください。