#!/bin/bash
# Script name: Tomcat Startup/shutdown
# Author: fire
# Date: 2016.5.5
#
# Comment:
# 根据脚本名启动相应的tomcat进程.系统内一个或多个tomcat时使用,不可添加到 ntsysv 中启动
# 例如,要启动 /home/tomcat_im 则将此脚本复制到 /etc/rc.d/init.d/ 并命名为 tomcat_im
# 因其根据 basename $0 做启动服务名的判定,固不可建立自启动/关闭的软连接
# 要随系统启动请在 /etc/rc.d/rc.local 中加入命令 service tomcat_im start
# 手动启动/关闭请用root用户执行: service tomcat_im {start|stop|restart} 既可
# 日志文件存放位置: /var/log/tomcat.log
# 移植性: 只需更改脚本中如下变量,保持如下变量的正确即可在其他linux系统中使用
# $TUSER(启动tomcat的用户) $TOMCAT_HOME(tomcat5绝对路径)
# $JAVA_HOME 在环境变量中设置
#
# chkconfig: 2345 80 20
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
. /etc/profile
# Script start...
TOMCAT=tomcat
TUSER=tomcat
TOMCAT_HOME=/opt/$TOMCAT
CATALINA_PID=$TOMCAT_HOME/logs/catalina.pid
# Function get_pid
get_pid()
{
pid=$(ps -ef|grep java |grep -w "$TOMCAT_HOME"|grep -v grep|awk '{print $2}')
echo $pid
}
# Function Process_stat
process_stat()
{
pid1=$(get_pid)
pid2=$(cat $CATALINA_PID 2>/dev/null)
#if [ -n "$pid1" -a $pid1 -ne 0 ];then
if [ -n "$pid1" ];then
if [ -n "$pid2" ];then
if [ "$pid1" = "$pid2" ];then
#echo "$TOMCAT is running"
return 0
else
#echo "$TOMCAT is running,but pid file is incorrect!"
return 1
fi
else
#echo "$TOMCAT is running,but pid file is not exists!"
return 2
fi
else
#echo "$TOMCAT is stopped"
return 3
fi
}
# Function Start
start()
{
process_stat
STAT=$?
if [ $STAT -eq 0 ];then
echo "$TOMCAT is running"
return $STAT
elif [ $STAT -eq 1 ];then
echo "$TOMCAT is running,but pid file is incorrect!"
return $STAT
elif [ $STAT -eq 2 ];then
echo "$TOMCAT is running,but pid file is incorrect!"
return $STAT
elif [ $STAT -eq 3 ];then
echo -n "Start $TOMCAT:"
#su - $TUSER -c "$TOMCAT_HOME/bin/startup.sh" >/dev/null 2>&1
su - $TUSER -c "/usr/local/python2.7/bin/python $TOMCAT_HOME/bin/listenCatalina.py >> $TOMCAT_HOME/logs/listenCatalina.log 2>&1 &"
su - $TUSER -c "$TOMCAT_HOME/bin/catalina.sh start &>/dev/null"
RETVAL=$?
pid=$(ps -o pid,args --no-heading -C java|grep -w $TOMCAT_HOME|awk '{print $1}')
echo $pid > $CATALINA_PID
if [ $RETVAL -eq 0 ];then
echo "[OK]"
fi
fi
}
# Function wait_stop
wait_stop()
{
time=10
for((i=1;i<=$time;i++))
do
pid=$(get_pid)
if [ -n "$pid" ];then
sleep 1
else
break
fi
done
}
# Function stop
stop()
{
process_stat
STAT=$?
pid=$(get_pid)
if [ $STAT -eq 0 ];then
echo -n "Stop $TOMCAT:"
if ps -ef | grep "python $TOMCAT_HOME/bin/listenCatalina.py" |grep -v grep > /dev/null ; then
pythonpid=` ps -ef | grep "python $TOMCAT_HOME/bin/listenCatalina.py" | grep -v grep |awk '{print $2}' `
for ppid in $pythonpid
do
kill $ppid
done
fi
#su - $TUSER -c "$TOMCAT_HOME/bin/shutdown.sh" >/dev/null 2>&1
su - $TUSER -c "$TOMCAT_HOME/bin/catalina.sh stop 10 -force &>/dev/null"
wait_stop
#rm -rf $TOMCAT_HOME/work/*
#rm -rf $TOMCAT_HOME/temp/*
num=3
for((i=1;i<=$num;i++))
do
process_stat
if [ $? -eq 3 ];then
echo "[OK]"
break
elif [ $i -ne $num ];then
kill $pid
else
kill -9 $pid
process_stat
[ $? -eq 3 ] && echo "[OK]"
fi
done
elif [ $STAT -eq 1 ];then
echo "can not stop $TOMCAT process,the pid file is incorrect!"
return $STAT
elif [ $STAT -eq 2 ];then
echo "can not stop $TOMCAT process,the pid file is incorrect!"
return $STAT
elif [ $STAT -eq 3 ];then
echo "$TOMCAT is stopped"
return 0
fi
}
# Function status
status()
{
process_stat
STAT=$?
if [ $STAT -eq 0 ];then
echo "$TOMCAT is running"
return $STAT
elif [ $STAT -eq 1 ];then
echo "$TOMCAT is running,but pid file is incorrect!"
return $STAT
elif [ $STAT -eq 2 ];then
echo "$TOMCAT is running,but pid file is incorrect!"
return $STAT
elif [ $STAT -eq 3 ];then
echo "$TOMCAT is stopped"
return $STAT
fi
}
#execute
case "$1" in
start)
start
;;
stop)
stop
;;
restart)
stop
start
;;
status)
status
;;
*)
echo "Use :$0 {start|stop|restart}"
;;
esacversion2:
#!/bin/bash
#
# Startup script for Jakarta Tomcat
#
# chkconfig: - 80 10
# description: Jakarta Tomcat Java Servlet/JSP Container
TOMCAT_HOME=/usr/local/tomcat
TOMCAT_STOP=$TOMCAT_HOME/bin/shutdown.sh
TOMCAT_START=$TOMCAT_HOME/bin/startup.sh
#Necessary environment variables
export CATALINA_HOME=$TOMCAT_HOME
export JAVA_HOME=/usr/local/jdk
TOMCAT_USER=application
# Source function library.
. /etc/rc.d/init.d/functions
# Source networking configuration.
. /etc/sysconfig/network
# Check that networking is up.
[ ${NETWORKING} = "no" ] && exit 0
#Check for tomcat script
if [ ! -f $TOMCAT_HOME/bin/catalina.sh ]
then
echo $TOMCAT_HOME/bin/catalina.sh
echo "Tomcat not available..."
exit
fi
start() {
echo "Starting Tomcat: "
# daemon $TOMCAT_START
/bin/su - $TOMCAT_USER -s /bin/bash -c $TOMCAT_START
echo
touch /var/lock/subsys/tomcatd
chown application:application /var/lock/subsys/tomcatd
# We may need to sleep here so it will be up for apache
# sleep 5
# Instead should check to see if apache is up by looking for http.pid
for pid in $(pidof java)
do
echo "disabling oom on pid $pid"
echo -17 > /proc/$pid/oom_adj
done
}
stop() {
echo $"Shutting down Tomcat: "
echo $TOMCAT_STOP
/bin/su - $TOMCAT_USER -s /bin/bash -c $TOMCAT_STOP
rm -f /var/lock/subsys/tomcatd.pid
sleep 5
#如果不能关闭tomcat时(tomcat有时的bug),调用以下代码#
pid=`ps aux |grep "java"|grep "tomcat"|grep -v "grep"|awk '{print $2}'`
if [ "$pid" = "" ] ; then
echo "tomcat is shutdown now!"
else
echo "force kill tomcat'pid $pid now"
kill -9 $pid
fi
}
status() {
ps -ef | grep java | grep "$TOMCAT_HOME" | grep 'catalina.startup.Bootstrap start' | awk '{print $2}' | tr '\n' ' ' >/tmp/tomcat_process_count.txt
read line < /tmp/tomcat_process_count.txt
if [ $line -gt 0 ]; then
echo -n "tomcatd ( pid "
ps -ef | grep java | grep "$TOMCAT_HOME" | grep 'catalina.startup.Bootstrap start' | awk '{print $2}' | tr '\n' ' '
echo ") is running..."
else
echo "Tomcat is stopped"
fi
}
case "$1" in
start)
start
;;
stop)
stop
;;
restart)
stop
sleep 3
start
;;
status)
status
;;
*)
echo "Usage: tomcatd {start|stop|restart|status}"
exit 1
esac