linux下,tomcat以service服务方式启动、关闭、重启、查看状态,并设置环境语言。
同时对启动命令进行检测,并给出提示信息。
#!/bin/sh
# chkconfig: 345 99 10
# description: Auto-starts tomcat
export JAVA_HOME=/usr/local/java/jdk1.8.0_40
export CATALINA_HOME=/usr/local/tomcat/tomcat9_18080
export CATALINA_BASE=$CATALINA_HOME
export JRE_HOME=$JAVA_HOME/jre
export LANG=en_US.utf8
RETVAL=0
start()
{
PID=$(ps -ef | grep $CATALINA_HOME | grep -v "grep" | awk '{print $2}')
if [[ ! -z "$PID" ]]
then
echo "$0 already started , please execute restart!!..."
else
if [ -f $CATALINA_HOME/bin/startup.sh ];
then
echo "$0 is starting..."
$CATALINA_HOME/bin/startup.sh
RETVAL=$?
return $RETVAL
else
echo "$0 shell is not exist..."
fi
fi
}
stop()
{
PID=$(ps -ef | grep $CATALINA_HOME | grep -v "grep" | awk '{print $2}')
if [[ ! -z "$PID" ]]
then
echo "$0 will be kill..."
kill -9 $PID
else
echo "$0 already stoped..."
fi
}
status(){
numproc=`ps -ef | grep catalina | grep -v "grep catalina" | wc -l`
PID=$(ps -ef | grep $CATALINA_HOME | grep -v "grep" | awk '{print $2}')
if [[ ! -z "$PID" ]]
then
echo "$0 is running..."
else
echo "$0 is stopped..."
fi
}
case "$1" in
start)
start
;;
stop)
stop
;;
restart)
echo $"Restaring Tomcat"
$0 stop
sleep 1
$0 start
;;
status)
status
;;
*)
echo $"Usage: $0 {start|stop|restart|status}"
exit 1
;;
esac
exit $RETVAL
辅助命令:
cd /etc/rc.d/init.d/
touch tomcat18080
chmod +x tomcat18080
vim tomcat18080
chkconfig --add tomcat18080
备注:命令设置tomcat环境语言
export LANG=en_US.utf8
此处解决问题:tomcat以service服务启动和以./start.sh命令启动,service方式访问不到半角文件名问题。
备注:
tomcat9,报错如下:
25-Oct-2019 15:45:54.051 INFO [http-nio-18080-exec-5] org.apache.coyote.http11.Http11Processor.service Error parsing HTTP request header
Note: further occurrences of HTTP request parsing errors will be logged at DEBUG level.
java.lang.IllegalArgumentException: Invalid character found in the request target. The valid characters are defined in RFC 7230 and RFC 3986
at org.apache.coyote.http11.Http11InputBuffer.parseRequestLine(Http11InputBuffer.java:467)
at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:294)
at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)
at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:770)
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1415)
at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.lang.Thread.run(Thread.java:745)
解决方法:tomcat9需要在server.xml里面设置如下内容,解决url请求不能携带特殊字符问题:
relaxedPathChars="|{}[],"
relaxedQueryChars="|{}[],"
<Connector port="18080" protocol="HTTP/1.1"
connectionTimeout="20000"
relaxedPathChars="|{}[],"
relaxedQueryChars="|{}[],"
redirectPort="18443" />