说明

在使用jenkins持续集成时,需要实现自动发布包到tomcat。该脚本实现了在jenkins将包发送到linux服务器上后的自动关闭、发布、启动、测试启动是否成功的过程

思路

该思路以tomcat的启动端口为8080,关闭端口为8005为例。tomcat自带了启动脚本startup.sh和停止脚本shutdown.sh,tomcat要在启动后,并且监听了shutdown端口后才能使用shutdown.sh脚本进行关闭。要实现该脚本需要以下步骤:

  1. 查看tomcat是否监听了启动端口。

    1. 如果tomcat的启动端口8080正在被监听则需要关闭tomcat。
    2. 关闭tomcat需要在这个时间里启动端口8080还是处于被监听状态,这时需要查看关闭端口8005是否可用,如若可用那说明没有进行过关闭,如果不可用说明已经执行了shutdown.sh脚本。
  2. tomcat关闭完成后,删除原有包、删除原有日志(视情况而定)、发布包、启动脚本
  3. 执行完启动脚本后就需要判断是否启动成功了,因本机设置了代理,所以需要临时取消代理。
    1. 利用curl访问测试的网页,获取返回的请求码http_code。
    2. 如果请求码http_code为000则说明tomcat还在启动。
    3. 如果请求码http_code为200则说明请求成功(视情况302也是请求成功的)。
    4. 在判断过程中要加入tomcat启动端口的判断,如果启动端口8080不可用,那说明tomcat启动失败了。

脚本

脚本内容如下:

#!/bin/sh
#set -o errexit
#默认tomcat文件夹名称
tomcat_name=apache-tomcat-9.0.16 #默认检查页面
check_page=login.jsp #默认检查页面
base_path=$(dirname $0) #默认尝试10次
max_try=10 while getopts ":u:d:p:t:m:b:" opt
do
case $opt in
#tomcat的启动端口
u)
startup_port=$OPTARG
echo "启动端口的值:$OPTARG"
;;
#tomcat的关闭端口
d)
shutdown_port=$OPTARG
echo "关闭端口的值:$OPTARG"
;;
#测试的访问页面
p)
check_page=$OPTARG
echo "测试的页面为:$OPTARG"
;;
#tomcat名称
t)
tomcat_name=$OPTARG
echo "tomcat名称为:$OPTARG"
;;
m)
max_try=$OPTARG
echo "base_path为:$OPTARG"
;;
b)
base_path=$OPTARG
echo "base_path为:$OPTARG"
;;
?)
echo "未知参数"
;;
esac
done
if [[ "$startup_port" -eq "" ]] || [[ "$shutdown_port" -eq "" ]] ; then
echo "必须要有u:$startup_port 启动端口,d:$shutdown_port 关闭端口参数"
exit 1
#statements
fi
#检查端口状态
check_port_status (){
if [[ $1 ]]; then
echo "**********$(date):查看的端口:$1*********"
return $(expr length "$(netstat -lnp|grep $1)")
else
echo "端口不能为空"
exit 1
fi
} #查看url的返回码
check_url_code () {
if [[ $1 ]]; then
echo "***********$(date):访问的url:$1**********"
return $(curl -I -m 10 -o /dev/null -s -w %{http_code} $1)
else
echo "url不能为空"
exit 1
fi
} check_port_status $startup_port
startup_status=$? while [[ startup_status -ne 0 ]]
do
echo "*****************$(date):等待tomcat关闭*******************"
sleep 5
#检测tomcat是否关闭
check_port_status $startup_port
startup_status=$? check_port_status $shutdown_port
shutdown_status=$?
if [[ shutdown_status -ne 0 ]]; then
echo “***************$(date)关闭tomcat****************”
$base_path/$tomcat_name/bin/shutdown.sh
fi
done echo "********************$(date):tomcat已是关闭状态***************" echo "***************删除原有包********************"
rm -rf $base_path/$tomcat_name/webapps/* echo "***************删除以前的日志********************"
rm -rf $base_path/$tomcat_name/logs/* #移动现有包
echo "***************将包发布在tomcat********************" cp $base_path/ROOT.war $base_path/$tomcat_name/webapps/ #启动命令
echo "***************启动tomcat********************" $base_path/$tomcat_name/bin/startup.sh echo "*************临时取消代理***************"
unset http_proxy
unset https_proxy
#判断是否启动成功 echo "*************等待启动完成***************"
code=000
trys=0
#先睡5秒不然tomcat还没有监听端口
sleep 5
check_port_status $startup_port
startup_status=$? while [[ code -eq 000 ]] && [[ trys -lt max_try ]] && [[ startup_status -ne 0 ]] do
sleep 10s
check_url_code http://localhost:$startup_port/$check_page
code=$?
trys=`expr $trys + 1`
check_port_status $startup_port
startup_status=$?
echo "*************$(date):第 $trys 次访问 $check_page,返回码为:$code***************" done if [[ startup_status -ne 0 ]] ;then if [[ code -eq 200 ]]; then
echo "***************$(date):tomcat启动成功,$check_page 访问成功,访问次数:$trys************"
exit 0
else
echo "***************$(date):tomcat启动成功,$check_page 访问失败,访问次数:$trys************"
exit 500
fi
else
echo "***************$(date):tomcat启动失败,请查看启动日志************"
exit 500
fi

使用

脚本参数已经在注释中说明,默认情况下该脚本需要和tomcat位于同一级目录,tomcat文件夹的名称为apache-tomcat-9.0.16。下面是示例

$ ./startup.sh -u 8080 -d 8005

linux中tomcat启动脚本:关闭、发布、重启、测试是否成功的更多相关文章

  1. Linux中tomcat启动很慢,SessionIdGeneratorBase.createSecureRandom耗时5分钟

    通常情况下,tomcat启动只要2~3秒钟,突然有一天,tomcat启动非常慢,要花5~6分钟,查了很久,终于在这篇文章找到了解决方案,博主牛人啊. 原文参见:http://blog.csdn.NET ...

  2. 【Eclpise】Eclipse中Tomcat启动失败或者是重启失败

    经常在Eclipse中遇到这样的问题,tomcat重启之后失败,而且也停止不了.最好的解决办法就是用DOS命令杀死进程. 比如下面这种情况: 1.查看进程ID  用windows的netstat查看信 ...

  3. linux中如何启动和关闭svn

    1,启动SVN sudo svnserve -d -r /home/data/svn/ 其中 -d 表示守护进程, -r 表示在后台执行 /home/data/svn/  为svn的安装目录 2,关闭 ...

  4. Linux 中 Weblogic 启动和关闭

    a.start weblogic1)找到 /Oracle/Middleware/user_projects/domains/ 用户_domain目录. nohup ./startWebLogic.sh ...

  5. linux中Jenkins启动/重启/停止命令

    简要记录一下Linux 中Jenkins启动/重启/停止命令 启动service jenkins start1重启service jenkins restart1停止service jenkins s ...

  6. PHP5.6中php-fpm的配置、启动、关闭和重启

    转:http://blog.csdn.net/field_yang/article/details/52401994 该文主要讲述:如何配置PHP-fpm.常见报错解决方法和php-fpm的启动.关闭 ...

  7. springboot以jar包方式启动、关闭、重启脚本

    springboot以jar包方式启动.关闭.重启脚本 启动 编写启动脚本startup.sh #!/bin/bash echo Starting application nohup java -ja ...

  8. (四)Springboot以jar包方式启动、关闭、重启脚本

    Springboot以jar包方式启动.关闭.重启脚本 1.启动 2.关闭 3.重启 4.脚本授权 SpringBoot: nohup java -jar zlkj-data-server-1.0-S ...

  9. 100个Shell脚本——【脚本3】tomcat启动脚本

    [脚本3]tomcat启动脚本 一.脚本tomcatd.sh #!/bin/bash # chkconfig:2345 64 36 # description: Tomcat start/stop/r ...

随机推荐

  1. 猫猫学iOS之UILabel设置圆角不成功所做调控更改

    原创文章.欢迎转载.转载请注明:翟乃玉的博客 地址:http://blog.csdn.net/u013357243 如图问题 如图是我要做的效果 然而当我写好代码后,设置号label的layer圆角后 ...

  2. 尝试create tech team

    自从上一家公司之后,我很少有机会去带一些新人(公司一般都招一些技术独立性的工程师),特别是经验不是特别多的新小伙伴.在如今管理扁平化的公司,我正逐渐搭建自己的小team,并试图让团队成员快速融入并成长 ...

  3. Xcode HeaderDoc 教程(3)

    打开 MathAPI.h,将第一个 @param 标签的參数名由firstNumber 改动为 thirdNumber,然后编译. 有一个警告发生.甚至提出了改动建议.它不会影响不论什么事情,但有助于 ...

  4. map集合遍历的五种方法

    package com.jackey.topic; import java.util.ArrayList;import java.util.HashMap;import java.util.Itera ...

  5. UESTC--1251--谕神的密码(贪心)

     谕神的密码 Time Limit: 1000MS   Memory Limit: 65535KB   64bit IO Format: %lld & %llu Submit Status ...

  6. bzoj3033 太鼓达人——欧拉图搜索

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3033 考虑那 (1<<k) 个数,要形成答案,必然是相邻两个数间有 k-1 个重 ...

  7. element快速开发建站的动态UI------优

    网站快速成型工具 只为这样的你:  Element,一套为开发者.设计师和产品经理准备的基于 Vue 2.0 的组件库,提供了配套设计资源,帮助你的网站快速成型 http://element.elem ...

  8. PCB WCF Web接口增减参数后,在客户端不更新的情况,是否影响客户端,评估测试

    1.目的:由于接口众多,服务端变更接口,会造成服务停用更新,造成客户端不能使用或报错, 在此评估[Web中心]此服务端,接口接口参数增加或减少,是否对客户端造成影响 2.评估内容:服务端增加单值参数, ...

  9. Java多线程技术-Volatile关键字解析

    分析volatile关键字可以从这三个方面分析,什么是程序的原子性,什么是程序的可见性,什么是程序的有序性 什么是程序的原子性 以下语句那些是原子操作? public class ThreadCoun ...

  10. RabbltMQ

    协议:AMQP协议  支持事务 端口号:默认端口5672 1.简单队列(simple queue) 一个生产者对应一个消费者 2.工作队列(work queue) 一个生产者对应多个消费者: 轮询分发 ...