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.serviceexport JAVA_HOME=/tomcat/java_home/jdk1.8.0_181export CATALINA_HOME=/tomcat/catalina_home/apache-tomcat-9.0.46export CATALINA_BASE=/tomcat/mobile_8180/apache-tomcat-9.0.46export CATALINA_PID=/tomcat/mobile_8180/apache-tomcat-9.0.46/conf/mobile_8180.pidexport CATALINA_USER=mobileexport 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 \stopsleep 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}" ;;esacexit 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

tomcat 自启动脚本(守护模式)的更多相关文章

  1. tomcat自启动脚本

    1.#cd /etc/rc.d/init.d2.#vi tomcat3.把下面的代码保存为tomcat文件,并让它成为可执行文件 chmod 755 tomcat. #!/bin/sh # # /et ...

  2. 任务:写一个tomcat自启动脚本

    写一篇<gitlab无法启动了应该怎么办>

  3. 红帽linux系统开机自启动脚本。

    其实很多东西在最后完成以后会觉得也就那样,有意思的是探究的过程. 前段时间老板要求把一个程序做成linux系统开机自启动脚本的模式. 首先你需要写一个脚本. 我这边建立了一个.sh的脚本,就是用脚本启 ...

  4. Tomcat重启脚本restart.sh停止脚本stop.sh

    Tomcat重启脚本restart.sh停止脚本stop.sh Tomcat本身提供了 startup.sh(启动)shutdown.sh(关闭)脚本,我们在部署中经常会出现死进程形象,无法杀掉进程需 ...

  5. linux添加开机自启动脚本示例详解

    linux下(以RedHat为范本)添加开机自启动脚本有两种方法,先来简单的; 一.在/etc/rc.local中添加如果不想将脚本粘来粘去,或创建链接什么的,则:step1. 先修改好脚本,使其所有 ...

  6. Centos开机自启动脚本的制作

    原文地址:http://www.2cto.com/os/201306/220559.html 我的一个Centos开机自启动脚本的制作   一.切换到/etc/init.d/   二.制作sh脚本 v ...

  7. 转载:ubuntu 下添加简单的开机自启动脚本

    转自:https://www.cnblogs.com/downey-blog/p/10473939.html linux下添加简单的开机自启动脚本 在linux的使用过程中,我们经常会碰到需要将某个自 ...

  8. Linux开机自启动脚本的总结

    一.在/etc/rc.local中添加 如果不想将脚本粘来粘去,或创建链接什么的, 则: step1. 先修改好脚本,使其所有模块都能在任意目录启动时正常执行; step2. 再在/etc/rc.lo ...

  9. 腾讯云服务器centos 6.5(jdk+tomcat+vsftp)、腾讯mysql数据库 及 tomcat自启动 配置教程

    1.腾讯云数据库配置 1.考虑到安全性问题,,平常不使用root用户登录,新增一个用户名neil,用来管理项目的数据库 a.首先登录root创建db_AA数据库 b.在root用户下,创建neil用户 ...

  10. Tomcat启动脚本

    记录一个比较好的tomcat启动脚本,截取<OneinStack>,修改如下两个参数即可用. 使用之前修改下面2个参数: #Location of JAVA_HOME (bin files ...

随机推荐

  1. go mod使用小结

    转载请注明出处: go mod 命令是用于管理 Go 语言项目的模块依赖关系的工具.Go 语言从 1.11 版本开始引入了模块支持,并在后续版本中逐渐完善.模块是 Go 语言代码的一个集合,每个模块都 ...

  2. [OS] 计算机资源虚拟化技术

    1 定义:计算机资源虚拟化 服务器虚拟化主要通过软件技术将物理服务器的硬件资源抽象化,创建多个独立的虚拟服务器环境. 2 虚拟化技术方向 以下是一些常见的服务器虚拟化方式和工具: 基于hypervis ...

  3. 史上最牛X的微信公众号!

    今天给大家推荐一个最牛逼的微信公众号,专注分享技术干货,包括但不限于Java,HTML,JavaScript,MySQL,Redis,Windows,Linux,Spring,SpringBoot,V ...

  4. R数据分析:跨层中介的原理和做法,实例操练

    之前有同学问过我211模型,没听过这个词,感觉怎么有这么不严肃的名字,偷偷去查了查,211模型,其实就是嵌套数据的中介的情形之一.根本上讲还是属于多水平模型的路径分析(用多水平模型跑回归也可以做中介, ...

  5. 再次探讨 WinForms 多线程开发

    再次探讨 WinForms 多线程开发 WinForms 已经开源,您现在可以在 GitHub 上查看 WinForm 源代码. 正好有人又讨论到在 WinFroms 环境下的多线程开发,这里就再整理 ...

  6. gradle 很棒

    一直以为 gradle 就是 maven 的一个易读版,表达上比 XML 更精简了,实际上还是maven,似乎没有存在的必要. 但是,万万没想到,这玩意儿竟然是一个语言,竟然可以调试!也就是说,它不是 ...

  7. Spring Cloud Sleuth in a Monolith Application

    1. Overview   In this article, we're introducing Spring Cloud Sleuth – a powerful tool for enhancing ...

  8. apache kylin的一些注意事项(解决kylin报错Storage schema reading not supported)

    1.目前我所使用的kylin版本为2.6.2,有时在完成一次构建后会出现fail to locate kylin.properties的异常,如图所示 经排查,定位到kylin源码中的 org.apa ...

  9. 使用JSch进行sftp的连接运行状况检查

    public boolean checkConnection() throws JSchException { try { JSch jsch = new JSch(); Session sessio ...

  10. Navicat Premium15安装与激活

    Navicat premium是一款数据库管理工具,是一个可多重连线资料库的管理工具,它可以让你以单一程式同时连线到 MySQL.SQLite.Oracle 及 PostgreSQL 资料库,让管理不 ...