Tomca启动脚本遇到的坑

前端之家收集整理的这篇文章主要介绍了Tomca启动脚本遇到的坑前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

tomcat脚本:

原始脚本:

[root@devops01-web-53scripts]#catTomcat-init
#!/bin/bash
###BEGININITINFO
#Provides:tomcat
#required-Start:$remote_fs$syslog
#required-Stop:$remote_fs$syslog
#Default-Start:2345
#Default-Stop:016
#Short-Description:tomcat-serverdaemon
#Description:tomcat-serverdaemon
###ENDINITINFO
#
#chkconfig:-9515
#description:Tomcatstart/stop/statusscript

#LocationofJAVA_HOME(binfiles)
exportJAVA_HOME=

#AddJavabinaryfilestoPATH
exportPATH=$JAVA_HOME/bin:$PATH

#CATALINA_HOMEisthelocationoftheconfigurationfilesofthisinstanceofTomcat
CATALINA_HOME=/usr/local/tomcat

#TOMCAT_USERisthedefaultuseroftomcat
TOMCAT_USER=www

#TOMCAT_USAGEisthemessageifthisscriptiscalledwithoutanyoptions
TOMCAT_USAGE="Usage:$0{\e[00;32mstart\e[00m|\e[00;31mstop\e[00m|\e[00;32mstatus\e[00m|\e[00;31mrestart\e[00m}"

#SHUTDOWN_WAITiswaittimeinsecondsforjavaproccesstostop
SHUTDOWN_WAIT=20

tomcat_pid(){
echo`ps-ef|grep$CATALINA_HOME/|grep-vgrep|tr-s""|cut-d""-f2`
}

start(){
pid=$(tomcat_pid)
if[-n"$pid"];then
echo-e"\e[00;31mTomcatisalreadyrunning(pid:$pid)\e[00m"
else
echo-e"\e[00;32mStartingtomcat\e[00m"
if[`user_exists$TOMCAT_USER`="1"];then
su$TOMCAT_USER-c$CATALINA_HOME/bin/startup.sh
else
$CATALINA_HOME/bin/startup.sh
fi
status
fi
return0
}

status(){
pid=$(tomcat_pid)
if[-n"$pid"];then
echo-e"\e[00;32mTomcatisrunningwithpid:$pid\e[00m"
else
echo-e"\e[00;31mTomcatisnotrunning\e[00m"
fi
}

stop(){
pid=$(tomcat_pid)
if[-n"$pid"];then
echo-e"\e[00;31mStopingTomcat\e[00m"
$CATALINA_HOME/bin/shutdown.sh

letkwait=$SHUTDOWN_WAIT
count=0;
until[`ps-p$pid|grep-c$pid`='0']||[$count-gt$kwait]
do
echo-n-e"\e[00;31mwaitingforprocessestoexit\e[00m\n";
sleep1
letcount=$count+1;
done

if[$count-gt$kwait];then
echo-n-e"\n\e[00;31mkillingprocesseswhichdidn'tstopafter$SHUTDOWN_WAITseconds\e[00m"
kill-9$pid
fi
else
echo-e"\e[00;31mTomcatisnotrunning\e[00m"
fi

return0
}

user_exists(){
ifid-u$1>/dev/null2>&1;then
echo"1"
else
echo"0"
fi
}

case$1in
start)
start
;;
stop)
stop
;;
restart)
stop
start
;;
status)
status
;;
*)
echo-e$TOMCAT_USAGE
;;
esac
exit0
[root@devops01-web-53scripts]#

tomcat启动的时候看不出异常,关闭的时候回报错类似:

SEVERE: Could not contact [localhost:[8005]]. Tomcat may not be running.

[root@szxjdw01-web-27~]#/application/tomcat-sbce/bin/shutdown.sh
UsingCATALINA_BASE:/application/tomcat-sbce
UsingCATALINA_HOME:/application/tomcat-sbce
UsingCATALINA_TMPDIR:/application/tomcat-sbce/temp
UsingJRE_HOME:/usr/java/jdk
UsingCLASSPATH:/application/tomcat-sbce/bin/bootstrap.jar:/application/tomcat-sbce/bin/tomcat-juli.jar
Jul26,201810:58:18AMorg.apache.catalina.startup.CatalinastopServer
SEVERE:Couldnotcontact[localhost:[8005]].Tomcatmaynotberunning.
Jul26,201810:58:18AMorg.apache.catalina.startup.CatalinastopServer
SEVERE:Catalina.stop:
java.net.ConnectException:Connectionrefused(Connectionrefused)
atjava.net.PlainSocketImpl.socketConnect(NativeMethod)
atjava.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350)
atjava.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206)
atjava.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188)
atjava.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
atjava.net.Socket.connect(Socket.java:589)
atjava.net.Socket.connect(Socket.java:538)
atjava.net.Socket.<init>(Socket.java:434)
atjava.net.Socket.<init>(Socket.java:211)
atorg.apache.catalina.startup.Catalina.stopServer(Catalina.java:497)
atsun.reflect.NativeMethodAccessorImpl.invoke0(NativeMethod)
atsun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
atsun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
atjava.lang.reflect.Method.invoke(Method.java:498)
atorg.apache.catalina.startup.Bootstrap.stopServer(Bootstrap.java:406)
atorg.apache.catalina.startup.Bootstrap.main(Bootstrap.java:495)

即为8005端口未运行,使用命令netstat -ant 发现 没有找到8005端口

[root@devops01-web-53scripts]#netstat-lntup|grepjava
tcp00:::8009:::*LISTEN10373/java
tcp00:::8080:::*LISTEN10373/java

解决办法:

修改$JAVA_HOME/jre/lib/security/Java.security 文件中 securerandom.source 配置项:

将
securerandom.source=file:/dev/random
修改为:
securerandom.source=file:/dev/urandom(网上查询的结果,我改完这个就可以了,下面的未测试)
如果,仍然不生效,则修改为:file:/dev/./urandom

实战如下:

[root@devops01-web-53scripts]#vim/usr/java/jdk/jre/lib/security/java.security
securerandom.source=file:/dev/random
修改为
securerandom.source=file:/dev/urandom

再次启动tomcat就有8005端口了,提示不是立刻就有8005端口,要等一小会才会有。

[root@devops01-web-53scripts]#netstat-lntup|grepjava
tcp00::ffff:127.0.0.1:8005:::*LISTEN10615/java
tcp00:::8009:::*LISTEN10615/java
tcp00:::8080:::*LISTEN10615/java

验证8005端口延时启动过程:

[root@szxjdw01-web-27~]#ps-ef|grepjava
root65786202011:02pts/100:00:00grepjava
[root@szxjdw01-web-27~]#/application/tomcat-sbce/bin/startup.sh
UsingCATALINA_BASE:/application/tomcat-sbce
UsingCATALINA_HOME:/application/tomcat-sbce
UsingCATALINA_TMPDIR:/application/tomcat-sbce/temp
UsingJRE_HOME:/usr/java/jdk
UsingCLASSPATH:/application/tomcat-sbce/bin/bootstrap.jar:/application/tomcat-sbce/bin/tomcat-juli.jar
Tomcatstarted.
[root@szxjdw01-web-27~]#ps-ef|grepjava
root658819911:02pts/100:00:10/usr/java/jdk/bin/java-Djava.util.logging.config.file=/application/tomcat-sbce/conf/logging.properties-Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager-Djdk.tls.ephemeralDHKeySize=2048-Djava.protocol.handler.pkgs=org.apache.catalina.webresources-Dorg.apache.catalina.security.SecurityListener.UMASK=0027-Dignore.endorsed.dirs=-classpath/application/tomcat-sbce/bin/bootstrap.jar:/application/tomcat-sbce/bin/tomcat-juli.jar-Dcatalina.base=/application/tomcat-sbce-Dcatalina.home=/application/tomcat-sbce-Djava.io.tmpdir=/application/tomcat-sbce/temporg.apache.catalina.startup.Bootstrapstart
root66106202011:02pts/100:00:00grepjava
[root@szxjdw01-web-27~]#netstat-lntup|grepjava
tcp00:::8009:::*LISTEN6588/java
tcp00:::8080:::*LISTEN6588/java
[root@szxjdw01-web-27~]#/application/tomcat-sbce/bin/shutdown.sh
UsingCATALINA_BASE:/application/tomcat-sbce
UsingCATALINA_HOME:/application/tomcat-sbce
UsingCATALINA_TMPDIR:/application/tomcat-sbce/temp
UsingJRE_HOME:/usr/java/jdk
UsingCLASSPATH:/application/tomcat-sbce/bin/bootstrap.jar:/application/tomcat-sbce/bin/tomcat-juli.jar
Jul26,201811:02:48AMorg.apache.catalina.startup.CatalinastopServer
SEVERE:Couldnotcontact[localhost:[8005]].Tomcatmaynotberunning.
Jul26,201811:02:48AMorg.apache.catalina.startup.CatalinastopServer
SEVERE:Catalina.stop:
java.net.ConnectException:Connectionrefused(Connectionrefused)
atjava.net.PlainSocketImpl.socketConnect(NativeMethod)
atjava.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350)
atjava.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206)
atjava.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188)
atjava.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
atjava.net.Socket.connect(Socket.java:589)
atjava.net.Socket.connect(Socket.java:538)
atjava.net.Socket.<init>(Socket.java:434)
atjava.net.Socket.<init>(Socket.java:211)
atorg.apache.catalina.startup.Catalina.stopServer(Catalina.java:497)
atsun.reflect.NativeMethodAccessorImpl.invoke0(NativeMethod)
atsun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
atsun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
atjava.lang.reflect.Method.invoke(Method.java:498)
atorg.apache.catalina.startup.Bootstrap.stopServer(Bootstrap.java:406)
atorg.apache.catalina.startup.Bootstrap.main(Bootstrap.java:495)

[root@szxjdw01-web-27~]#netstat-lntup|grepjava
tcp00::ffff:127.0.0.1:8005:::*LISTEN6588/java
tcp00:::8009:::*LISTEN6588/java
tcp00:::8080:::*LISTEN6588/java
[root@szxjdw01-web-27~]#/application/tomcat-sbce/bin/shutdown.sh
UsingCATALINA_BASE:/application/tomcat-sbce
UsingCATALINA_HOME:/application/tomcat-sbce
UsingCATALINA_TMPDIR:/application/tomcat-sbce/temp
UsingJRE_HOME:/usr/java/jdk
UsingCLASSPATH:/application/tomcat-sbce/bin/bootstrap.jar:/application/tomcat-sbce/bin/tomcat-juli.jar
[root@szxjdw01-web-27~]#netstat-lntup|grepjava




最后脚本被修改为:

[root@devops01-web-53application]#cat/etc/init.d/tomcat-sbce
#!/bin/bash
###BEGININITINFO
#Provides:tomcat
#required-Start:$remote_fs$syslog
#required-Stop:$remote_fs$syslog
#Default-Start:2345
#Default-Stop:016
#Short-Description:tomcat-serverdaemon
#Description:tomcat-serverdaemon
###ENDINITINFO
#
#chkconfig:-9515
#description:Tomcatstart/stop/statusscript

#LocationofJAVA_HOME(binfiles)
exportJAVA_HOME=/usr/java/jdk

#AddJavabinaryfilestoPATH
exportPATH=$JAVA_HOME/bin:$PATH

#CATALINA_HOMEisthelocationoftheconfigurationfilesofthisinstanceofTomcat
CATALINA_HOME=/application/tomcat-sbce

#TOMCAT_USERisthedefaultuseroftomcat
TOMCAT_USER=sysadmin

#TOMCAT_USAGEisthemessageifthisscriptiscalledwithoutanyoptions
TOMCAT_USAGE="Usage:$0{\e[00;32mstart\e[00m|\e[00;31mstop\e[00m|\e[00;32mstatus\e[00m|\e[00;31mrestart\e[00m}"

#SHUTDOWN_WAITiswaittimeinsecondsforjavaproccesstostop
SHUTDOWN_WAIT=20
[-f/etc/init.d/functions]&&./etc/init.d/functions
actions(){
RETVAL=$?
if[$RETVAL-eq0];then
action"Tomcatis$1"/bin/true
else
action"Tomcatis$1"/bin/false
fi
}

tomcat_pid(){
echo`ps-ef|grep$CATALINA_HOME|grep-vgrep|tr-s""|cut-d""-f2`
}

start(){
pid=$(tomcat_pid)
if[-n"$pid"];then
echo-e"\e[00;31mTomcatisalreadyrunning(pid:$pid)\e[00m"
else
echo-e"\e[00;32mStartingtomcat\e[00m"
if[`user_exists$TOMCAT_USER`="1"];then
su-$TOMCAT_USER-c$CATALINA_HOME/bin/startup.sh>/dev/null2>&1&
else
$CATALINA_HOME/bin/startup.sh
fi
status
actionsStarted
fi
return0
}

status(){
pid=$(tomcat_pid)
if[-n"$pid"];then
echo-e"\e[00;32mTomcatisrunningwithpid:$pid\e[00m"
else
echo-e"\e[00;31mTomcatisnotrunning\e[00m"
fi
}

stop(){
pid=$(tomcat_pid)
if[-n"$pid"];then
echo-e"\e[00;31mStopingTomcat\e[00m"
su-$TOMCAT_USER-c$CATALINA_HOME/bin/shutdown.sh>/dev/null2>&1&

letkwait=$SHUTDOWN_WAIT
count=0;
until[`ps-p$pid|grep-c$pid`='0']||[$count-gt$kwait]
do
echo-n-e"\e[00;31mwaitingforprocessestoexit\e[00m\n";
actionstopped
sleep1
letcount=$count+1;
done

if[$count-gt$kwait];then
echo-n-e"\n\e[00;31mkillingprocesseswhichdidn'tstopafter$SHUTDOWN_WAITseconds\e[00m"
kill-9$pid
fi
else
echo-e"\e[00;31mTomcatisnotrunning\e[00m"
fi

return0
}

user_exists(){
ifid-u$1>/dev/null2>&1;then
echo"1"
else
echo"0"
fi
}

case$1in
start)
start
;;
stop)
stop
;;
restart)
stop
start
;;
status)
status
;;
*)
echo-e$TOMCAT_USAGE
;;
esac
exit0

验证脚本:

脚本在root下面可以正常运行,在设置的普通账号可以运行,但是在非设置非root提示没有权限。


实际验证操作:有的机器8005可以立马启动,有的是延迟启动

猜你在找的Bash相关文章