2015-02-24 271 views
1

我想要配置Tomcat的init.d啓動腳本的多個實例的工作(此時2個實例)啓動多個Tomcat實例

我按照下面的示例腳本創建的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,正因爲如此,二審不能啓動。有沒有更好的方法來處理這個問題?

回答

0

發現用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]}'` 
}