linux中tomcat启动脚本:关闭、发布、重启、测试是否成功

说明

在使用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

转载于:https://www.cnblogs.com/many-object/p/11083084.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值