不求甚解

此博客为个人学习之用,如与其他作品雷同,纯属巧合。

导航

tomcat 自启动脚本(守护模式)

Posted on 2021-06-03 17:59  三年三班王小朋  阅读(428)  评论(0编辑  收藏  举报

tomcat以daemon模式启动

跳转到最新脚本

1.jsvc简介

Jsvc 是专为 Java 应用程序开发的一个工具包,其目标是把 Java 应用程序的普通运行转换为可以配置某个普通用户以 Unix 守护进程即daemon模式运行。这样的话,可以很方便地启动 / 停止应用程序,同时也可以支持开机自启,这样每次重启后,不需要手动重启tomcat就可以自动恢复服务。

生产中daemon守护进程的好处有以下三点

  • 以daemon方式运行tomcat可使tomcat不受终端影响,不会因为退出终端而停止运行。
  • 可以让tomcat以普通用户身份运行。
  • 可以让tomcat在系统启动时自动运行。

2.安装jsvc

Tomcat 安装包的 bin 子目录下就包含了 Jsvc 工具包的源码。

1、将tomcat和jdk安装包上传到服务器。

上传apache-tomcat-9.0.46.tar.gz和jdk-8u181-linux-x64.tar.gz到/tomcat目录下

2、解压缩tomcat和jdk的tar包

假设jdk8的安装目录是 /tomcat/java_home/,Tomcat的安装目录是/tomcat/catalina_home/

tar zxvf /tomcat/apache-tomcat-9.0.46.tar.gz –C /tomcat/catalina_home/
tar zxvf /tomcat/jdk-8u181-linux-x64.tar.gz –C /tomcat/java_home/

3、解压jsvc安装包commons-daemon-native.tar.gz

cd /tomcat/apache-tomcat-9.0.46/bin
tar xzvf commons-daemon-native.tar.gz

4、编译安装jsvc,如果没有配置java环境需要使用参数--with-java指出jdk安装位置

cd commons-daemon-1.1.0-native-src/unix/
./configure --with-java=/tomcat/catalina_home/jdk1.8.0_181
make

5、将解压的jsvc复制到tomcat的bin/目录下

cp jsvc ../../ 

3.使用deamon.sh模式

Tomcat的bin/目录下有个deamon.sh脚本,可以调用deamon.sh start和deamon stop启动/关闭tomcat的守护模式


 

Tomcat8 守护模式开机自启动。

1. cd /etc/init.d

2. vi tomcat8 粘帖一下文本

#!/bin/bash
# description: tomcat deamon script for start/stop/restart the mobile.service
# chkconfig: service mobile.service {start/stop/restart}
# port: 8180
# auther by wxp

. /etc/rc.d/init.d/functions

prog=mobile.service
export JAVA_HOME=/tomcat/java_home/jdk1.8.0_181
export CATALINA_HOME=/tomcat/catalina_home/apache-tomcat-9.0.46
export CATALINA_BASE=/tomcat/mobile_8180/apache-tomcat-9.0.46
export CATALINA_PID=/tomcat/mobile_8180/apache-tomcat-9.0.46/conf/mobile_8180.pid
export CATALINA_USER=mobile
export CATALINA_SERVICE_START_WAIT_TIME=10

cd $CATALINA_HOME/bin

case "$1" in

start)
echo "Starting Tomcat..."
./daemon.sh \
--java-home $JAVA_HOME \
--catalina-home $CATALINA_HOME \
--catalina-base $CATALINA_BASE \
--catalina-pid $CATALINA_PID \
--tomcat-user $CATALINA_USER \
--service-start-wait-time $CATALINA_SERVICE_START_WAIT_TIME \
start
;;

stop)
echo "Stopping Tomcat..."
./daemon.sh \
--java-home $JAVA_HOME \
--catalina-home $CATALINA_HOME \
--catalina-base $CATALINA_BASE \
--catalina-pid $CATALINA_PID \
--tomcat-user $CATALINA_USER \
--service-start-wait-time $CATALINA_SERVICE_START_WAIT_TIME \
stop
;;

restart)
echo "restarting Tomcat..."
./daemon.sh \
--java-home $JAVA_HOME \
--catalina-home $CATALINA_HOME \
--catalina-base $CATALINA_BASE \
--catalina-pid $CATALINA_PID \
--tomcat-user $CATALINA_USER \
--service-start-wait-time $CATALINA_SERVICE_START_WAIT_TIME \
stop
sleep 3
./daemon.sh \
--java-home $JAVA_HOME \
--catalina-home $CATALINA_HOME \
--catalina-base $CATALINA_BASE \
--catalina-pid $CATALINA_PID \
--tomcat-user $CATALINA_USER \
--service-start-wait-time $CATALINA_SERVICE_START_WAIT_TIME \
start
;;

*)
echo "Usage: $prog {start|stop|restart}"
;;
esac
exit 0

3. 保存退出、chmod 755 tomcat8 赋权限

4. 启动 service tomcat8 start

5. chkconfig tomcat8 on,chkconfig --list tomcat 查看启动状态

 


 tomcat deamon模式启停脚本(升级)

tomcatServer.sh

# !/bin/bash
# description: tomcat daemon script
# chkconfig: 2345 10 90
# auther by wangxp

#java和tomcat家目录设置
export JAVA_HOME=/u01/java_home/jdk1.8.0_181/
export CATALINA_HOME=/u01/catalina_home/apache-tomcat-9.0.46
#应用相关设置
export CATALINA_BASE_DIR=/u01/template_tomcat
export CATALINA_BASE=$CATALINA_BASE_DIR/apache-tomcat-9.0.46
#启动用户
export CATALINA_USER=root
#程序名称
export PROG=tomcat
#服务启动等待时间
export CATALINA_SERVICE_START_WAIT_TIME=10
#进程pid号
export CATALINA_PID=$CATALINA_BASE/conf/$PROG.pid

CURRENT_DATE=$(date +%Y%m%d)
CURRENT_TIME=$(date +%Y%m%d%H%M%S)

. /etc/rc.d/init.d/functions
tomcatfun(){
./daemon.sh \
--java-home $JAVA_HOME \
--catalina-home $CATALINA_HOME \
--catalina-base $CATALINA_BASE \
--catalina-pid $CATALINA_PID \
--tomcat-user $CATALINA_USER \
--service-start-wait-time $CATALINA_SERVICE_START_WAIT_TIME $1
}

if [ `whoami` != $CATALINA_USER ];then
echo -e "you must use \033[31m$CATALINA_USER\033[0m to excute"
exit
fi

if test ! -d $JAVA_HOME;then
echo -e "\033[31mError\033[0m: JAVA_HOME is not available"
exit
fi
if test ! -d $CATALINA_HOME;then
echo -e "\033[31mError\033[0m: CATALINA_HOME is not available"
exit
fi
if test ! -d $CATALINA_BASE;then
echo -e "\033[31mError\033[0m: CATALINA_BASE is not available"
exit
fi

cd $CATALINA_HOME/bin
case "$1" in
start)
echo "Starting Tomcat..." 
tomcatfun start
if [ -f $CATALINA_PID ]; then
echo -e "$PROG is \033[32mActive\033[0m"
echo "pid=`cat $CATALINA_PID` `cat $CATALINA_BASE/conf/server.xml|grep 'protocol="HTTP/1.1"'|awk 'NR==1''{print $2}'`"
else
echo -e "$PROG started failed"
fi
;;
stop)
echo "Stopping Tomcat..." 
tomcatfun stop
if [ -f $CATALINA_PID ]; then
echo "$PROG stopped failed"
else
echo -e "$PROG is \033[31mDead\033[0m"
fi
;;
restart)
echo "restarting Tomcat..." 
tomcatfun stop
sleep 1
tomcatfun start
if [ -f $CATALINA_PID ]; then
echo -e "$PROG is \033[32mActive\033[0m"
echo "pid=`cat $CATALINA_PID` `cat $CATALINA_BASE/conf/server.xml|grep 'protocol="HTTP/1.1"'|awk 'NR==1''{print $2}'`"
else
echo -e "$PROG is \033[31mDead\033[0m"
fi
;;
status)
if [ -f $CATALINA_PID ]; then
echo -e "$PROG is \033[32mActive\033[0m"
echo "pid=`cat $CATALINA_PID` `cat $CATALINA_BASE/conf/server.xml|grep 'protocol="HTTP/1.1"'|awk 'NR==1''{print $2}'`"
else
echo -e "$PROG is \033[31mDead\033[0m"
fi
;;
upgrade)
#检查最新打包文件是否已经上传
if test ! -f ${CATALINA_BASE_DIR}/${PROG}.war ;then
        echo "${PROG}.war is not exist"
        exit
fi
#判断备份文件是否存在,不存在创建备份文件夹,然后停止项目
if test ! -d ${CATALINA_BASE_DIR}/backup/project/${CURRENT_DATE};then
        mkdir -p ${CATALINA_BASE_DIR}/backup/project/${CURRENT_DATE}
fi
if test ! -d ${CATALINA_BASE_DIR}/backup/logs/${CURRENT_DATE};then
        mkdir -p ${CATALINA_BASE_DIR}/backup/logs/${CURRENT_DATE}
fi
#停止项目
echo "Stopping Tomcat..."
tomcatfun stop
sleep 1
if [ -f $CATALINA_PID ]; then
echo "$PROG stopped failed"
exit 1
else
echo -e "$PROG is \033[31mDead\033[0m"
fi
#拷贝日志和项目到备份文件夹
mv $CATALINA_BASE/logs/catalina-daemon.out ${CATALINA_BASE_DIR}/backup/logs/${CURRENT_DATE}/catalina-daemon.out-${CURRENT_TIME}
if [ $? -eq 0 ];then
echo "log backup complate. file:${CATALINA_BASE_DIR}/backup/logs/${CURRENT_DATE}/catalina-daemon.out-${CURRENT_TIME}"
else
echo "log backup failed!"
exit
fi
mv $CATALINA_BASE/webapps/${PROG} ${CATALINA_BASE_DIR}/backup/project/${CURRENT_DATE}/${PROG}-${CURRENT_TIME}
if [ $? -eq 0 ];then
echo "projet backup complate. file:${CATALINA_BASE_DIR}/backup/project/${CURRENT_DATE}/${PROG}-${CURRENT_TIME}"
else
echo "project back failed!"
exit
fi
#移动项目
rm -rf ${CATALINA_BASE}/webapps/${PROG}.war
mv ${CATALINA_BASE_DIR}/${PROG}.war ${CATALINA_BASE}/webapps
if [ $? -ne 0 ];then
echo "'mv' ${PROG}.war failed!"
exit
fi
#启动项目
echo "Starting Tomcat..." 
tomcatfun start
if [ -f $CATALINA_PID ]; then
echo -e "$PROG is \033[32mActive\033[0m"
echo "pid=`cat $CATALINA_PID` `cat $CATALINA_BASE/conf/server.xml|grep 'protocol="HTTP/1.1"'|awk 'NR==1''{print $2}'`"
else
echo -e "$PROG started failed"
fi
;;
log)
if test -f ${CATALINA_BASE}/logs/catalina-daemon.out
then
tail -500f ${CATALINA_BASE}/logs/catalina-daemon.out
else
echo "${CATALINA_BASE}/logs/catalina-daemon.out is not found"
fi
;;
*)
echo "Usage: $PROG {start|stop|restart|status|upgrade|log}"
;;
esac
exit 0