Shell脚本之tomcat启动脚本解读

Shell 是一个用C语言编写的程序,它是用户使用Linux的桥梁。Shell既是一种命令语言,又是一种程序设计语言。
Shell 是指一种应用程序,这个应用程序提供了一个界面,用户通过这个界面访问操作系统内核的服务。

可以在菜鸟教程进行学习 http://www.runoob.com/linux/linux-shell-basic-operators.html

基本思路:把现有的正在运行的tomcat停掉,解压war包,放到tomcat目录下,清缓存,再启动

两个所需脚本deploy.sh和restart.sh都放在tomcat/bin目录下
现在对启动脚本进行解析,演示发布启动tomcat,执行命令 bin/deploy.sh+要发布的war包

bin/deploy.sh (要发布的war包)

打包发布脚本deploy.sh脚本

 #!/bin/sh

war=$1
bin=$(cd `dirname $0`; pwd)

if [ ! -n "${war}" ]; then
   echo "***Usage: $0 [project.war]"
   exit 0
fi
if [ ! -f "${war}" ]; then
    echo "***Error: ${war} does not exist."
    exit 0
fi
if [ ! "${war##*.}" = "war" ]; then
    echo "***Error: ${war} is not a war file."
    exit 0
fi

echo "Deploy ${war##*/}..."
rm -rf ${bin}/../webapps/ROOT/ && unzip -qo ${war} -d ${bin}/../webapps/ROOT/
rm -rf ${bin}/../work/Catalina/localhost/
echo "Restart tomcat..."
exec ${bin}/restart.sh

第一行 #!/bin/sh 虽然是注释,但是也不可省略,表明一种格式。
第三行 war=$1 是将传进来的值赋给 war 这个变量, $1 就是启动命令./bin/deploy.sh后边的参数,也就是(要发布的war包),实际上就是war包的路径文件。
第四行 bin=$(cd `dirname $0`; pwd) ,“ $0 ”代表bin/deploy.sh,所以“ dirname $0 ”是bin, cd 进到bin目录之后执行pwd查出全路径,一般是/usr/xxx/xxx/tomcat/bin,再把这个路径赋给 bin
第六到九行 if语句 ,条件语句中的 -n 检测字符串长度是否为0,所以就是在检测是否有传值进来,没有就提示“要传值啦”。
第十到十三 if语句 ,条件语句中的 -f 检测文件是否是普通文件,所以就是在检测传的是不是一个文件,没有就提示“包不存在”。
第十四到十七 if语句 ,条件语句中的 ##*. 实在取后缀扩展名,所以就是在检测是否是一个“war”包,不是就提示“这个不是war包啦”。
第十九行 echo “Deploy ${war##*/}…” ,输出打印日志。
第二十行 rm 删除命令, && 前半段是删除tomcat目录下的那个ROOT文件夹,后半段是解压传进来那个war包并安装到这个ROOT路径下。简单来说就是替换掉。
第二十一行 rm 删除命令,删除日志信息。
第二十二行 echo “Restart tomcat…” ,输出“正在重启tomcat”让你开心下。
第二十三行 exec ${bin}/restart.sh 执行restart.sh文件,这个文件就是启动文件。

启动脚本restart.sh脚本

#!/bin/sh

bin=$(cd `dirname $0`; pwd)
pid=$(ps aux | grep tomcat | grep -v grep | grep -v restart | grep ${bin} | awk '{print $2}')
if [ -n "${pid}" ]; then
   echo "Shutdown..."
   sh ${bin}/shutdown.sh
   sleep 3

    pid=$(ps aux | grep tomcat | grep -v grep | grep -v restart | grep ${bin} | awk '{print $2}')
    if [ -n "${pid}" ]; then
        kill -9 ${pid}
        sleep 1
    fi
fi

echo "Startup..."
sh ${bin}/startup.sh
if [ "$1" = "-v" ]; then
    tail -f ${bin}/../logs/catalina.out
fi

第一行 #!/bin/sh ,格式很重要。
第三行 bin=$(cd`dirname $0`; pwd) ,跟上边一样,获取tomcat下bin的全路径赋给bin。
第四行一串的管道,其实就是在查出正在运行的tomcat进程。
第五到十五行的 if语句

  • 第五行检测tomcat进程是否存在,也就是是否正在运行,存在的话,在第七行用tomcat的关闭命令shutdown.sh温柔地关掉,第八行线程停3秒(因为关闭需要时间),第十行跟第四行一样,查出正在运行的tomcat进程。第十一到十四行,检测tomcat进程是否还存在,如果存在,用 kill -9 暴力杀掉进程。

第十七行 echo “Startup…” ,输出“启动中”让你开心下。
第十八行 sh ${bin}/startup.sh ,执行tomcat的启动脚本启动tomcat。
第十九到二十一行 if语句 ,如果在一开始输入命令时有带 “-v” 参数,就把日志信息打印出来。

至此,tomcat发布启动完毕。

猜你喜欢

转载自blog.csdn.net/snow____man/article/details/83550072
今日推荐