一、在实际生产环境中tomcat启动是在bin目录下采用自带脚本startup.sh启动;使用shutdown.sh关闭。如下图:
再如果对于新手来讲在不知道路径情况下重启是一件头痛的事情(注意没有reload,所以重启只能shutdown.sh在startup.sh);而且这里还有一个坑等着:
什么坑呢? 如图:
tomcat服务是启动成功了的。那么我想停止服务用shutdown.sh,会出现什么呢?
进程还在而且成为了僵尸进程,万恶啊?居然关不了,终极方法kill -9 进程号。试试?
终于干掉了。
再次启动:
OK已经成功;还有一个坑在?请看,服务已经启动,如果我再次执行startup.sh会出现什么呢?
请看红色,启动命令能正常执行,而且还能启动一个服务意思是有双服务双进程。万恶啊……
好问题来了我们如何简单命令的启动tomcat服务呢?如何让服务启动了再次执行启动就不会执行了呢?ok。shell脚本实现:
二、脚本实现
1 #!/bin/bash 2 ############################################# 3 # this script is created by xuxuedong. # 4 # e_mail:365686746@qq.com # 5 # qqinfo:365686746 # 6 # This is server start to chkconfig. # 7 # version:1.1 # 8 ############################################# 9 # chkconfig: 2345 92 92 10 # description: Saves and restores system entropy pool for \ 11 # higher quality random number generatio 12 13 . /etc/init.d/functions 14 #set env 15 export PATH=$PATH:/bin:/sbin:/usr/sbin 16 export LANG="zh_CN.GB18030" 17 18 # Require root to run this script. 19 if [[ "$(whoami)" != "root" ]]; then 20 echo "Please run this script as root." >&2 21 exit 1 22 fi 23 24 # Source function library. 25 #. /etc/init.d/functions 26 if [ ! -f /opt/software/apache-tomcat-7.0.72/bin/startup.sh ] 27 then 28 echo "tomcat is not exit.please install." 29 exit 1 30 fi 31 #This is a function for start tomcat 32 function start(){ 33 if [ `ps -ef |grep java|grep -v grep|grep -v sh|wc -l` -eq 0 ] 34 then 35 /bin/sh /opt/software/apache-tomcat-7.0.72/bin/startup.sh >/dev/null 2>&1 36 [ $? -eq 0 ]&&\ 37 sleep 1 38 action "tmocat start." /bin/true 39 else 40 action "tomcat had been startted." /bin/true 41 exit 3 42 fi 43 } 44 #This is a function for stop tomcat 45 function stop(){ 46 if [ `ps -ef |grep java|grep -v grep|grep -v sh|wc -l` -gt 0 ] 47 then 48 PID=`ps -ef |grep java|grep -v grep|awk '{print $2}'` 49 kill -9 $PID 50 [ $? -eq 0 ]&&\ 51 echo "tomcat is stopping..." 52 sleep 1 53 action "tomcat been stoped." /bin/true 54 else 55 action "tomcat had been stoped." /bin/true 56 exit 4 57 fi 58 } 59 #This is a function for restart tomcat 60 function restart(){ 61 if [ `ps -ef |grep java |grep -v grep|grep -v sh|wc -l` -gt 0 ] 62 then 63 PID1=`ps -ef |grep java|grep -v grep|awk '{print $2}'` 64 kill -9 $PID1 65 [ $? -eq 0 ]&&/bin/sh /opt/software/apache-tomcat-7.0.72/bin/startup.sh >/dev/null 2>&1 66 67 [ $? -eq 0 ]&&echo "tomcat is restarting..." 68 sleep 1 69 action "tomcat is restartted ." /bin/true 70 else 71 action "tomcat is not running,please start." /bin/true 72 exit 5 73 fi 74 } 75 #This is a function for status tomcat 76 function status(){ 77 if [ `ps -ef |grep java |grep -v grep|wc -l` -gt 0 ] 78 then 79 action "tomcat is running." /bin/true 80 else 81 action "tomcat is stopped." /bin/false 82 exit 5 83 fi 84 } 85 case $1 in 86 start) 87 start 88 ;; 89 stop) 90 stop 91 ;; 92 restart) 93 restart 94 ;; 95 status) 96 status 97 ;; 98 99 *)100 echo "USAG:start|stop|restart|status"101 esa
放心这脚本是我工作中自己写的启动脚本,已经测试过。如有疑问请看脚本执行情况:
请看:
1、首先来看下服务是否启动
脚本实现了查看服务是否启动;
2、再次执行脚本看看能否启动多个服务
注意红色部分已经提示服务已经启动不需要在执行命令了,而且查看进程只有一个刚启动服务。
3.停止服务还有僵尸进程吗?:
停止后服务没有了?
4.那我们在服务没有起来的情况下,我们想重启服务呢?
没有启动服务情况下执行restart会提示,而且服务也不会启动。
5、启动服务:
服务又起来了。
6、如果是别人不知道这个服务后面要给参数或者输错了参数start|stop|restart|status才能启动那么会出现什么效果呢?
OK到现在所有的功能已经实现而且跟系统的 启动方法类似了。只是系统实现的是、service XXXX start|stop|restart|status或者是etc/init.d/xxx start|stop|restart|status
如何才能实现和系统一模一样的功能呢?
三、使用service tomcatd start启停或者是/etc/init.d/tomcatd start
1、将脚本文件拷贝至/etc/init.d/
cp tomcatd.sh /etc/init.d/tomcatd
chmod +x /etc/init.d/tomcatd 加可执行权限。
默认已经可执行service tomcatd start|stop|restart|status
2、将tomcatd加入chkconfig开机自启动。
# chkconfig: 2345 92 92 请注意以上脚本文件中有这一行表示2345启动号码是92
从哪儿来的?
使用ls -l /etc/rc3.d 可查看
注意:最好从中选去没有的号码如:
已经有27了那么不能使用27。
93 94 92 (原本没有之后加入了tomcatd)表示没有用可用
所以使用92
3、使用chkconfig --add tomcatd 加入
不报错表示成功;
4、检查一下:chkconfig --list |grep tomcatd
ok 成功!
以上是简单的脚本实现功能,高手绕道,不好勿喷,适合初学以及脚本学习者,原本想在脚本中增加注释,但是自己想偷懒如有疑问可留言。