OSS Fan ~OSSでLinuxサーバ構築~

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

Tomcat6インストール+初期設定

カテゴリ:OSSセットアップ | ソフトウェア:Tomcat | タグ:
最終更新日:2021/01/03 | 公開日:2011/03/18

目次

構成

サーバ構成

OSバージョン

CentOS 5.5 64bit

パッケージ一覧

apache-tomcat-6.0.32.tar.gz

環境構築

インストール

Tomcatのプログラム本体のダウロード

 以下のウェブサイトから、Tomcat 6.0の最新のtar.gzファイルをダウンロードします。
【URL】
 http://tomcat.apache.org/download-60.cgi
【ファイル名】
 apache-tomcat-6.0.32.tar.gz ※2011/03/11時点での最新版

 ダウンロードしたファイルを/tmpディレクトリに配置します。

OSユーザとグループの作成

 Tomcat起動用のユーザを作成します。ユーザ名、グループ名共に「tomcat」とします。

# groupadd -g 1001 tomcat
# useradd -u 1001 -g tomcat -s /bin/bash tomcat

Tomcatのプログラムの展開

 tomcatユーザにスイッチした後、配置したファイルをtarコマンドで展開し、/usr/localディレクトリに移動させます。

# su - tomcat
$ cd /tmp/
$ tar zxvf ./apache-tomcat-6.0.32.tar.gz 
apache-tomcat-6.0.32/bin/catalina.sh
apache-tomcat-6.0.32/bin/digest.sh
apache-tomcat-6.0.32/bin/setclasspath.sh
apache-tomcat-6.0.32/bin/shutdown.sh
apache-tomcat-6.0.32/bin/startup.sh
(中略)
apache-tomcat-6.0.32/webapps/manager/images/tomcat.gif
apache-tomcat-6.0.32/webapps/manager/images/update.gif
apache-tomcat-6.0.32/webapps/manager/images/void.gif
apache-tomcat-6.0.32/webapps/manager/status.xsd
apache-tomcat-6.0.32/webapps/manager/xform.xsl
$ exit
# mv /tmp/apache-tomcat-6.0.32 /usr/local/

設定

シンボリックリンクの作成

 ディレクトリ名を簡略化させるためにtomcatという名でシンボリックリンクを作成します。 これによって、今後Tomcatをリビジョンアップさせた場合でも、シンボリックリンクを 張り直すだけで最新のTomcatを利用でき、関連シェル等の修正が不要となります。

# cd /usr/local/
# ln -s apache-tomcat-6.0.32 tomcat

 ログディレクトリを/var/logディレクトリ以下へtomcat6という名前にリネームして移動し、 元のlogsディレクトリへシンボリックリンクを作成します。

# cd /usr/local/tomcat/
# mv logs /var/log/tomcat6
# ln -s /var/log/tomcat6 logs

Tomcatの起動

 tomcatユーザで起動シェルを実行後、プロセスが起動したことを確認します。 その後、tomcatユーザで停止シェルを実行し、プロセスが停止したことを確認します。

# su - tomcat -c /usr/local/tomcat/bin/startup.sh
Using CATALINA_BASE:   /usr/local/tomcat
Using CATALINA_HOME:   /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME:        /usr/java/jdk1.6.0_24
Using CLASSPATH:       /usr/local/tomcat/bin/bootstrap.jar
# ps -ef | grep tomcat | grep -v grep
tomcat    4328     1  4 00:23 ?        00:00:03 /usr/java/jdk1.6.0_24/bin/java -Djava.util.logging.config.file=/usr/local/tomcat/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djava.endorsed.dirs=/usr/local/tomcat/endorsed -classpath /usr/local/tomcat/bin/bootstrap.jar -Dcatalina.base=/usr/local/tomcat -Dcatalina.home=/usr/local/tomcat -Djava.io.tmpdir=/usr/local/tomcat/temp org.apache.catalina.startup.Bootstrap start
# su - tomcat -c /usr/local/tomcat/bin/shutdown.sh
Using CATALINA_BASE:   /usr/local/tomcat
Using CATALINA_HOME:   /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME:        /usr/java/jdk1.6.0_24
Using CLASSPATH:       /usr/local/tomcat/bin/bootstrap.jar
# ps -ef | grep tomcat | grep -v grep

rcスクリプトの作成

 Linux起動時にTomcatを自動起動させるためのrcスクリプトを作成します。 今回はCentOS5.5にバンドルされているTomcat5のrcスクリプトをベースにして作成しました。 一部バグ修正も行っていますが、ザッと作成しただけなので不具合があるかもしれませんがご了承ください。

# cd /etc/rc.d/init.d/
# vi tomcat6
ファイル名:/etc/rc.d/init.d/tomcat6
#!/bin/bash
#
# tomcat6      This shell script takes care of starting and stopping Tomcat
#
# chkconfig: - 80 20
#
### BEGIN INIT INFO
# Provides: tomcat6
# Required-Start: $network $syslog
# Required-Stop: $network $syslog
# Default-Start:
# Default-Stop:
# Description: Release implementation for Servlet 2.4 and JSP 2.0
# Short-Description: start and stop tomcat
### END INIT INFO
#
# - originally written by Henri Gomez, Keith Irwin, and Nicolas Mailhot
# - heavily rewritten by Deepak Bhole and Jason Corley
#

# commented out until the RHEL and FC daemon functions converge
# Source the function library
#if [ -r "/etc/rc.d/init.d/functions" ]; then
    #. /etc/rc.d/init.d/functions
#fi

NAME="$(basename $0)"
unset ISBOOT
if [ "${NAME:0:1}" = "S" -o "${NAME:0:1}" = "K" ]; then
    NAME="${NAME:3}"
    ISBOOT="1"
fi

# For SELinux we need to use 'runuser' not 'su'
if [ -x "/sbin/runuser" ]; then
    SU="/sbin/runuser"
else
    SU="su"
fi

# Define which connector port to use
CONNECTOR_PORT="${CONNECTOR_PORT:-8080}"

# Tomcat program name
TOMCAT_PROG="$NAME"

# Define the tomcat username
TOMCAT_USER="${TOMCAT_USER:-tomcat}"

# Define the tomcat log file
TOMCAT_LOG="${TOMCAT_LOG:-/var/log/tomcat6/catalina.out}"

# Time to wait in seconds, before killing process
SHUTDOWN_WAIT=30

RETVAL="0"

# remove when the RHEL and FC daemon functions converge
# (pulled from /etc/rc.d/init.d/functions)
function checkpid() {
    local i
    for i in $* ; do
        if [ -d "/proc/${i}" ]; then
            return 0
        fi
    done
    return 1
}

# remove when the RHEL and FC daemon functions converge
# (pulled from /etc/rc.d/init.d/functions)
function echo_failure() {
    echo -en "\\033[60G"
    echo -n "[  "
    echo -n $"FAILED"
    echo -n "  ]"
    echo -ne "\r"
    return 1
}

# remove when the RHEL and FC daemon functions converge
# (pulled from /etc/rc.d/init.d/functions)
function echo_success() {
    echo -en "\\033[60G"
    echo -n "[  "
    echo -n $"OK"
    echo -n "  ]"
    echo -ne "\r"
    return 0
}

# See how we were called.
function start() {
    echo -n "Starting ${TOMCAT_PROG}: "
    if [ -f "/var/lock/subsys/${NAME}" ] ; then
        if [ -f "/var/run/${NAME}.pid" ]; then
            read kpid < /var/run/${NAME}.pid
                if checkpid $kpid 2>&1; then
                    echo "$NAME process already running"
                        return -1
                    else
                        echo "lock file found but no process running for"
                        echo "pid $kpid, continuing"
                fi
        fi
    fi
    export CATALINA_PID="/var/run/${NAME}.pid"
    touch $CATALINA_PID
    chown ${TOMCAT_USER}:${TOMCAT_USER} $CATALINA_PID
#    $SU - $TOMCAT_USER -c "$TOMCAT_SCRIPT start" >> $TOMCAT_LOG 2>&1
    $SU - $TOMCAT_USER -c "/usr/local/tomcat/bin/startup.sh" >> $TOMCAT_LOG 2>&1
    RETVAL="$?"
    if [ "$RETVAL" -eq 0 ]; then
        echo_success
        pgrep -u tomcat java > $CATALINA_PID
        touch /var/lock/subsys/${NAME}
    else
        echo_failure
    fi
    echo
    return $RETVAL
}

function status() {
    RETVAL="1"
    if [ -f "/var/run/${NAME}.pid" ]; then
        read kpid < /var/run/${NAME}.pid
        if checkpid $kpid 2>&1; then
            echo "$0 is already running (${kpid})"
            RETVAL="0"
        else
            echo "lock file found but no process running for pid $kpid"
        fi
    else
        pid="$(pgrep -u tomcat java)"
        if [ -n "$pid" ]; then
            echo "$0 running (${pid}) but no PID file exists"
            RETVAL="0"
        else
            echo "$0 is stopped"
        fi
    fi
    return $RETVAL
}

function stop() {
    local STOP_VERBOSE="false"
    echo -n "Stopping $TOMCAT_PROG: "
    if [ -f "/var/lock/subsys/${NAME}" ]; then
#        $SU - $TOMCAT_USER -c "$TOMCAT_SCRIPT stop" >> $TOMCAT_LOG 2>&1
        $SU - $TOMCAT_USER -c "/usr/local/tomcat/bin/shutdown.sh" >> $TOMCAT_LOG 2>&1
        RETVAL="$?"
        if [ "$RETVAL" -eq "0" ]; then
            count="0"
            if [ -f "/var/run/${NAME}.pid" ]; then
                read kpid < /var/run/${NAME}.pid
                until [ "$(ps --pid $kpid | grep -c $kpid)" -eq "0" ] || \
                      [ "$count" -gt "$SHUTDOWN_WAIT" ]; do
                    if [ "$STOP_VERBOSE" = "true" ]; then
                        echo -n -e "\nwaiting for processes $kpid to exit"
                    fi
                    sleep 1
                    let count="${count}+1"
                done
                if [ "$count" -gt "$SHUTDOWN_WAIT" ]; then
                    if [ "$STOP_VERBOSE" = "true" ]; then
                        echo -n -e "\nkilling processes which didn't stop"
                        echo -n -e "after "
                        echo -n "$SHUTDOWN_WAIT seconds"
                    fi
                    kill -9 $kpid
                fi
                echo_success
                if [ "$count" -gt "0" ]; then
                    echo -n -e "\n"
                fi
            fi
            rm -f /var/lock/subsys/$NAME /var/run/$NAME.pid
        else
            echo_failure
        fi
    fi
}


# See how we were called.
case "$1" in
    start)
        start
        ;;
    stop)
        stop
        ;;
    restart)
        stop
        sleep 2
        start
        ;;
    condrestart)
        if [ -f "/var/run/${NAME}.pid" ]; then
            stop
            start
        fi
        ;;
    status)
        status
        ;;
    *)
        echo "Usage: $TOMCAT_PROG {start|stop|restart|condrestart|status}"
        exit 1
esac

exit $RETVAL

 作成したrcスクリプトに実行権限を付与します。

# chmod 755 tomcat6

rcスクリプトの登録と自動起動の設定

 作成したrcスクリプトを登録します。 その後自動起動するよう設定します。

# chkconfig --add tomcat6
# chkconfig --list tomcat6
tomcat6         0:off   1:off   2:off   3:off   4:off   5:off   6:off
# chkconfig tomcat6 on
# chkconfig --list tomcat6
tomcat6         0:off   1:off   2:on    3:on    4:on    5:on    6:off