OSCA

Apache Tomcat の起動スクリプトのテンプレート

このエントリーをはてなブックマークに追加

Tomcatをインストールする際にいつも困るのが、Tomcatのパッケージには起動スクリプトのサンプルがついていない事です。 ここでは、私がいつも書いている起動スクリプトを晒してみようと思います。

ちなみに私の環境は、 CentOS, Tomcat 6.0.xx です。

前提

※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 起動時の環境変数などは、皆様それぞれで必要な記述を追加してください。

著者 : OSCA

OSCA

個人として何か一つでも世の中の多くの人に使ってもらえるサービスを作ろうと日々奮闘中のエンジニア。 夜景好きのアマチュア写真家でもあります。
Twitter : @oscaphoto
Facebook : OSCA