【问题标题】:Starting multiple tomcat instances in one server with init.d script使用 init.d 脚本在一台服务器中启动多个 tomcat 实例
【发布时间】:2015-04-25 21:24:46
【问题描述】:

我正在尝试配置 tomcat init.d 启动脚本以使用多个实例(此时为 2 个实例)

我正在按照下面的示例脚本来创建 init.d 脚本

#!/bin/bash
#
# tomcat     This shell script takes care of starting and stopping Tomcat
#
# chkconfig: - 80 20
#
### BEGIN INIT INFO
# Provides: tomcat
# Required-Start: $network $syslog
# Required-Stop: $network $syslog
# Default-Start:
# Default-Stop:
# Short-Description: start and stop tomcat
### END INIT INFO

TOMCAT_USER=root
TOMCAT_HOME="/opt/tomcat7/node1"
SHUTDOWN_WAIT=45

tomcat_pid() {
    echo `ps aux | grep org.apache.catalina.startup.Bootstrap | grep -v grep | awk '{ print $2 }'`
}

start() {
    pid=$(tomcat_pid)
    if [ -n "$pid" ]
    then
        echo "Tomcat is already running (pid: $pid)"
    else
        # Start tomcat
        echo "Starting tomcat service"
        /bin/su - -c "cd $TOMCAT_HOME/bin && $TOMCAT_HOME/bin/startup.sh" $TOMCAT_USER
    fi
    return 0
}

stop() {
    pid=$(tomcat_pid)
    if [ -n "$pid" ]
    then
        echo "Stoping Tomcat"
        /bin/su - -c "cd $TOMCAT_HOME/bin && $TOMCAT_HOME/bin/shutdown.sh" $TOMCAT_USER

    let kwait=$SHUTDOWN_WAIT
    count=0
    count_by=5
    until [ `ps -p $pid | grep -c $pid` = '0' ] || [ $count -gt $kwait ]
    do
        echo "Waiting for processes to exit. Timeout before we kill the pid: ${count}/${kwait}"
        sleep $count_by
        let count=$count+$count_by;
    done

    if [ $count -gt $kwait ]; then
        echo "Killing processes which didn't stop after $SHUTDOWN_WAIT seconds"
        kill -9 $pid
    fi
    else
        echo "Tomcat is not running"
    fi

    return 0
}

case $1 in
    start)
        start
        ;;
    stop)
        stop
        ;;
    restart)
        stop
        start
        ;;
    status)
       pid=$(tomcat_pid)
        if [ -n "$pid" ]
        then
           echo "Tomcat is running with pid: $pid"
        else
           echo "Tomcat is not running"
        fi
        ;;
esac

exit 0

问题是tomcat_pid() 方法返回所有tomcat 实例的进程ID,因此无法启动第二个实例。有没有更好的处理方法?

【问题讨论】:

    标签: centos tomcat7 multiple-instances init.d


    【解决方案1】:

    找到了解决方法,但期待更好的解决方案

    使用 netstat 我们可以通过运行端口号找到进程 ID

    echo `netstat -tlnp | awk '/:80  */ {split($NF,a,"/"); print a[1]}'`
    

    所以我修改了函数tomcat_pid()如下

    tomcat_pid() {
        echo `netstat -tlnp | awk '/:<port>  */ {split($NF,a,"/"); print a[1]}'`
    }
    

    【讨论】:

      猜你喜欢
      • 2013-09-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-03
      • 2012-12-24
      • 2018-09-01
      • 1970-01-01
      • 2014-04-25
      相关资源
      最近更新 更多