设为首页 - 加入收藏 92站长网 (http://www.92zhanzhang.com)- 国内知名站长资讯网站,提供最新最全的站长资讯,创业经验,网站建设等!
热搜: 为什么 中国 苹果
当前位置: 首页 > 环亚娱乐ag88平台最具|首页 > 外闻 > 正文

大公司程序员带你死磕Tomcat—Tomcat如何做到一键式启停

发布时间:2019-10-30 11:07 所属栏目:[外闻] 来源:今日头条
导读:在没有SpringBoot内嵌有Tomcat之前,我们都是将项目打为War包放在Tomcat的webapp目录下面,然后如果是Linux系统,运行命令start.sh、如果是Windows系统,运行命令start.bat以后就能启动起来并访问到页面。如果是想要停止运行只需要运行shutdown.sh或者shut

环亚娱乐ag88平台最具|首页在没有SpringBoot内嵌有Tomcat之前,我们都是将项目打为War包放在Tomcat的webapp目录下面,然后如果是Linux系统,运行命令start.sh、如果是Windows系统,运行命令start.bat以后就能启动起来并访问到页面。如果是想要停止运行只需要运行shutdown.sh或者shutdown.bat就能将程序停止起来,那么Tomcat是如何做到只需要一个命令就将所有容器启动起来呢?

大公司程序员带你死磕Tomcat—Tomcat如何做到一键式启停

脚本分析

start.sh和start.bat里面的内容相同,所以这里就主要分析start.sh的内容了。

  1. os400=false?
  2. case?"`uname`"?in?
  3. OS400*)?os400=true;;?
  4. esac?
  5. #?resolve?links?-?$0?may?be?a?softlink?
  6. #?PRG是脚本路径,如果当前脚本文件为软连接,则会解析出PRG真正文件所在的路径?
  7. PRG="$0"?
  8. while?[?-h?"$PRG"?]?;?do?#?判断是否为软连接?
  9. ?ls=`ls?-ld?"$PRG"`?#?如果是软连接,输出中含有lin?->?source的字符串?
  10. ?link=`expr?"$ls"?:?'.*->?\(.*\)$'`?#?模式匹配出源文件的路径?
  11. ?if?expr?"$link"?:?'/.*'?>?/dev/null;?then?#?正则匹配?/.*?这里expr会输出匹配个数,如果不为0,则说明$link包含目录?
  12. ?PRG="$link"?
  13. ?else?
  14. ?PRG=`dirname?"$PRG"`/"$link"?#?当不包含目录,说明软连接和源文件在同一目录?
  15. ?fi?
  16. done?
  17. #?获取脚本目录路径?
  18. PRGDIR=`dirname?"$PRG"`?
  19. EXECUTABLE=catalina.sh?
  20. #?Check?that?target?executable?exists?
  21. if?$os400;?then?
  22. ?#?-x?will?Only?work?on?the?os400?if?the?files?are:?
  23. ?#?1.?owned?by?the?user?
  24. ?#?2.?owned?by?the?PRIMARY?group?of?the?user?
  25. ?#?this?will?not?work?if?the?user?belongs?in?secondary?groups?
  26. ?eval?
  27. else?
  28. ?if?[?!?-x?"$PRGDIR"/"$EXECUTABLE"?];?then?
  29. ?echo?"Cannot?find?$PRGDIR/$EXECUTABLE"?
  30. ?echo?"The?file?is?absent?or?does?not?have?execute?permission"?
  31. ?echo?"This?file?is?needed?to?run?this?program"?
  32. ?exit?1?
  33. ?fi?
  34. fi?
  35. #?执行catalina.sh的start命令?
  36. exec?"$PRGDIR"/"$EXECUTABLE"?start?"$@"?

其实上面简单来说就做了两件事

  1. 拿到脚本的真正路径
  2. 执行catalina.sh的start命令

而shutdown.sh和start.sh命令一样,只不过后面是执行catalina.sh的stop命令

catalina.sh脚本

脚本中重要的步骤有以下几个

1.设置两个重要的环境变量,CATALINA_HOME、CATALINA_BASE

  1. PRGDIR=`dirname?"$PRG"`?
  2. ????[?-z?"$CATALINA_HOME"?]?&&?CATALINA_HOME=`cd?"$PRGDIR/.."?>/dev/null;?pwd`?
  3. ????[?-z?"$CATALINA_BASE"?]?&&?CATALINA_BASE="$CATALINA_HOME"?

设置CLASSPATH变量,这里注意,默认是没有setenv.sh文件的,可以自己新建一个并添加参数

  1. CLASSPATH=?
  2. ?
  3. if?[?-r?"$CATALINA_BASE/bin/setenv.sh"?];?then?
  4. ?
  5. .?"$CATALINA_BASE/bin/setenv.sh"?
  6. ?
  7. elif?[?-r?"$CATALINA_HOME/bin/setenv.sh"?];?then?
  8. ?
  9. .?"$CATALINA_HOME/bin/setenv.sh"?
  10. ?
  11. fi?

将bootstrap.jar作为CLASSPATH变量传进去

  1. if?[?!?-z?"$CLASSPATH"?]?;?then?
  2. ?????CLASSPATH="$CLASSPATH":?
  3. ????fi?
  4. ????CLASSPATH="$CLASSPATH""$CATALINA_HOME"/bin/bootstrap.jar?
  5. ????if?[?-z?"$CATALINA_OUT"?]?;?then?
  6. ?????CATALINA_OUT="$CATALINA_BASE"/logs/catalina.out?
  7. ????fi?

【免责声明】本站内容转载自互联网,其相关言论仅代表作者个人观点绝非权威,不代表本站立场。如您发现内容存在版权问题,请提交相关链接至邮箱:bqsm@foxmail.com,我们将及时予以处理。

网友评论
推荐文章