本文将为您提供关于记一次升级Tomcat的详细介绍,我们还将为您解释记一次升级仪式的相关知识,同时,我们还将为您提供关于3.1.从零开始学springboot-记一次tomcat7报错、java–如何
本文将为您提供关于记一次升级Tomcat的详细介绍,我们还将为您解释记一次升级仪式的相关知识,同时,我们还将为您提供关于3.1. 从零开始学 springboot - 记一次 tomcat7 报错、java – 如何在linux上升级Tomcat、Linux(CentOS7)安装Tomcat与设置Tomcat为开机启动项(tomcat8为例)、linux安装的是tomcat7,打开tomcat管理界面发现是tomcat6的实用信息。
本文目录一览:- 记一次升级Tomcat(记一次升级仪式)
- 3.1. 从零开始学 springboot - 记一次 tomcat7 报错
- java – 如何在linux上升级Tomcat
- Linux(CentOS7)安装Tomcat与设置Tomcat为开机启动项(tomcat8为例)
- linux安装的是tomcat7,打开tomcat管理界面发现是tomcat6
记一次升级Tomcat(记一次升级仪式)
总述
JDK都要出12了,而我们项目使用的jdk却仍然还停留在JDK1.6。为了追寻技术的发展的脚步,我这边准备将项目升级到JDK1.8。而作为一个web项目,我们的容器使用的是Tomcat。看了下Tomcat版本与JDK版本之间的兼容关系http://tomcat.apache.org/whichversion.html以及网上所传的各种JDK1.8和Tomcat7不兼容的问题, 我决定将Tomcat升级到8。我这里本地验证采用的tomcat版本是8.5.38https://tomcat.apache.org/download-80.cgi。
问题一:请求js文件报404错误
其实这个问题严格来讲不是升级到Tomcat8出现的问题,而是升级到Tomcat9出现的问题。正好我开始尝试的是Tomcat9,无法解决这个问题才降到Tomcat8。所以这里一并记录下来。
这个问题在从Tomcat6升级到Tomcat7之后也会存在,原因如下,在项目代码中对js的请求路径中包含了{、}
等特殊符号:
<script type="text/javascript" src="${ctx}/js/common/include_css.js?{''ctx'':''${ctx}'',''easyui'':''easyui''}"></script>
前台会发现加载js的时候报了404的错误,后台报错信息如下:
Invalid character found in the request target.The valid characters are defined in RFC 7230 and RFC3986
出现这个问题的原因是因为Tomcat升级之后对安全进行了升级,其中就有对请求中的特殊字符进行校验,具体校验规则参照下面的代码:
(InternalInputBuffer、InternalAprInputBuffer、InternalNioInputBuffer)
/**
* Read the request line. This function is meant to be used during the
* HTTP request header parsing. Do NOT attempt to read the request body
* using it.
*
* @throws IOException If an exception occurs during the underlying socket
* read operations, or if the given buffer is not big enough to accommodate
* the whole line.
*/
@Override
public boolean parseRequestLine(boolean useAvailableDataOnly)
throws IOException {
int start = 0;
//
// Skipping blank lines
//
byte chr = 0;
do {
// Read new bytes if needed
if (pos >= lastValid) {
if (!fill())
throw new EOFException(sm.getString("iib.eof.error"));
}
// Set the start time once we start reading data (even if it is
// just skipping blank lines)
if (request.getStartTime() < 0) {
request.setStartTime(System.currentTimeMillis());
}
chr = buf[pos++];
} while ((chr == Constants.CR) || (chr == Constants.LF));
pos--;
// Mark the current buffer position
start = pos;
//
// Reading the method name
// Method name is a token
//
boolean space = false;
while (!space) {
// Read new bytes if needed
if (pos >= lastValid) {
if (!fill())
throw new EOFException(sm.getString("iib.eof.error"));
}
// Spec says method name is a token followed by a single SP but
// also be tolerant of multiple SP and/or HT.
if (buf[pos] == Constants.SP || buf[pos] == Constants.HT) {
space = true;
request.method().setBytes(buf, start, pos - start);
} else if (!HttpParser.isToken(buf[pos])) {
throw new IllegalArgumentException(sm.getString("iib.invalidmethod"));
}
pos++;
}
// Spec says single SP but also be tolerant of multiple SP and/or HT
while (space) {
// Read new bytes if needed
if (pos >= lastValid) {
if (!fill())
throw new EOFException(sm.getString("iib.eof.error"));
}
if (buf[pos] == Constants.SP || buf[pos] == Constants.HT) {
pos++;
} else {
space = false;
}
}
// Mark the current buffer position
start = pos;
int end = 0;
int questionPos = -1;
//
// Reading the URI
//
boolean eol = false;
while (!space) {
// Read new bytes if needed
if (pos >= lastValid) {
if (!fill())
throw new EOFException(sm.getString("iib.eof.error"));
}
// Spec says single SP but it also says be tolerant of HT
if (buf[pos] == Constants.SP || buf[pos] == Constants.HT) {
space = true;
end = pos;
} else if ((buf[pos] == Constants.CR)
|| (buf[pos] == Constants.LF)) {
// HTTP/0.9 style request
eol = true;
space = true;
end = pos;
} else if ((buf[pos] == Constants.QUESTION) && (questionPos == -1)) {
questionPos = pos;
} else if (HttpParser.isNotRequestTarget(buf[pos])) {
throw new IllegalArgumentException(sm.getString("iib.invalidRequestTarget"));
}
pos++;
}
request.unparsedURI().setBytes(buf, start, end - start);
if (questionPos >= 0) {
request.queryString().setBytes(buf, questionPos + 1,
end - questionPos - 1);
request.requestURI().setBytes(buf, start, questionPos - start);
} else {
request.requestURI().setBytes(buf, start, end - start);
}
// Spec says single SP but also says be tolerant of multiple SP and/or HT
while (space) {
// Read new bytes if needed
if (pos >= lastValid) {
if (!fill())
throw new EOFException(sm.getString("iib.eof.error"));
}
if (buf[pos] == Constants.SP || buf[pos] == Constants.HT) {
pos++;
} else {
space = false;
}
}
// Mark the current buffer position
start = pos;
end = 0;
//
// Reading the protocol
// Protocol is always "HTTP/" DIGIT "." DIGIT
//
while (!eol) {
// Read new bytes if needed
if (pos >= lastValid) {
if (!fill())
throw new EOFException(sm.getString("iib.eof.error"));
}
if (buf[pos] == Constants.CR) {
end = pos;
} else if (buf[pos] == Constants.LF) {
if (end == 0)
end = pos;
eol = true;
} else if (!HttpParser.isHttpProtocol(buf[pos])) {
// 关键点在这一句,如果校验不通过,则会报参数异常
throw new IllegalArgumentException(sm.getString("iib.invalidHttpProtocol"));
}
pos++;
}
if ((end - start) > 0) {
request.protocol().setBytes(buf, start, end - start);
} else {
request.protocol().setString("");
}
return true;
}
我们进一步跟进HttpParser
中的方法:
public static boolean isNotRequestTarget(int c) {
// Fast for valid request target characters, slower for some incorrect
// ones
try {
// 关键在于这个数组
return IS_NOT_REQUEST_TARGET[c];
} catch (ArrayIndexOutOfBoundsException ex) {
return true;
}
}
// Combination of multiple rules from RFC7230 and RFC 3986. Must be
// ASCII, no controls plus a few additional characters excluded
if (IS_CONTROL[i] || i > 127 ||
i == '' '' || i == ''\"'' || i == ''#'' || i == ''<'' || i == ''>'' || i == ''\\'' ||
i == ''^'' || i == ''`'' || i == ''{'' || i == ''|'' || i == ''}'') {
// 可以看到只有在REQUEST_TARGET_ALLOW数组中的值才不会设置成true,所以我们需要追踪REQUEST_TARGET_ALLOW数组的赋值
if (!REQUEST_TARGET_ALLOW[i]) {
IS_NOT_REQUEST_TARGET[i] = true;
}
}
String prop = System.getProperty("tomcat.util.http.parser.HttpParser.requestTargetAllow");
if (prop != null) {
for (int i = 0; i < prop.length(); i++) {
char c = prop.charAt(i);
// 可以看到在配置文件中配置了tomcat.util.http.parser.HttpParser.requestTargetAllow并且包含{、}、|的时候,REQUEST_TARGET_ALLOW数组中的值才会为true
if (c == ''{'' || c == ''}'' || c == ''|'') {
REQUEST_TARGET_ALLOW[c] = true;
} else {
log.warn(sm.getString("httpparser.invalidRequestTargetCharacter",
Character.valueOf(c)));
}
}
}
解决办法: 其实通过源码分析不难得到解决办法
在Tomcat的catalina.properties文件中添加以下语句:
tomcat.util.http.parser.HttpParser.requestTargetAllow={}|
当然需要注意的是,这个后门
在Tomcat8.5以后就无法使用的,Tomcat9之后的解决办法暂时未找到,可能只有对URL进行编码了。
问题二:Cookie设置报错
这个问题就是在升级到Tomcat8.5以上的时候会出现的,具体原因是Tomcat8.5采用的Cookie处理类是:
Rfc6265CookieProcessor
,而在之前使用的处理类是LegacyCookieProcessor
。该处理类对domai进行了校验:
private void validateDomain(String domain) {
int i = 0;
int prev = -1;
int cur = -1;
char[] chars = domain.toCharArray();
while (i < chars.length) {
prev = cur;
cur = chars[i];
if (!domainValid.get(cur)) {
throw new IllegalArgumentException(sm.getString(
"rfc6265CookieProcessor.invalidDomain", domain));
}
// labels must start with a letter or number
if ((prev == ''.'' || prev == -1) && (cur == ''.'' || cur == ''-'')) {
throw new IllegalArgumentException(sm.getString(
"rfc6265CookieProcessor.invalidDomain", domain));
}
// labels must end with a letter or number
if (prev == ''-'' && cur == ''.'') {
throw new IllegalArgumentException(sm.getString(
"rfc6265CookieProcessor.invalidDomain", domain));
}
i++;
}
// domain must end with a label
if (cur == ''.'' || cur == ''-'') {
throw new IllegalArgumentException(sm.getString(
"rfc6265CookieProcessor.invalidDomain", domain));
}
}
新的Cookie规范对domain有以下要求
1、必须是1-9、a-z、A-Z、. 、- (注意是-不是_)这几个字符组成 2、必须是数字或字母开头 (所以以前的cookie的设置为.XX.com 的机制要改为 XX.com 即可) 3、必须是数字或字母结尾
原来的代码设置domain时如下:
cookie.setDomain(".aaa.com");
这就导致设置domain的时候不符合新的规范,直接报错如下:
java.lang.IllegalArgumentException: An invalid domain [.aaa.com] was specified for this cookie
at org.apache.tomcat.util.http.Rfc6265CookieProcessor.validateDomain(Rfc6265CookieProcessor.java:181)
at org.apache.tomcat.util.http.Rfc6265CookieProcessor.generateHeader(Rfc6265CookieProcessor.java:123)
at org.apache.catalina.connector.Response.generateCookieString(Response.java:989)
at org.apache.catalina.connector.Response.addCookie(Response.java:937)
at org.apache.catalina.connector.ResponseFacade.addCookie(ResponseFacade.java:386)
解决办法(以下3中任意一种皆可)
-
修改原来代码为:
cookie.setDomain("aaa.com");
-
如果是Spring-boot环境,直接替换默认的Cookie处理类:
@Configuration @ConditionalOnExpression("${tomcat.useLegacyCookieProcessor:false}") public class LegacyCookieProcessorConfiguration { @Bean EmbeddedServletContainerCustomizer embeddedServletContainerCustomizerLegacyCookieProcessor() { return new EmbeddedServletContainerCustomizer() { @Override public void customize(ConfigurableEmbeddedServletContainer factory) { if (factory instanceof TomcatEmbeddedServletContainerFactory) { TomcatEmbeddedServletContainerFactory tomcatFactory = (TomcatEmbeddedServletContainerFactory) factory; tomcatFactory.addContextCustomizers(new TomcatContextCustomizer() { @Override public void customize(Context context) { context.setCookieProcessor(new LegacyCookieProcessor()); } }); } } }; } }
-
在Tomcat的context.xml中增加如下配置,指定Cookie的处理类:
<CookieProcessor className="org.apache.tomcat.util.http.LegacyCookieProcessor" />
参考链接
https://blog.csdn.net/fy_sun123/article/details/73115381
http://ju.outofmemory.cn/entry/367186
https://www.cnblogs.com/lr393993507/p/7755867.html http://tomcat.apache.org/tomcat-8.5-doc/config/cookie-processor.html
3.1. 从零开始学 springboot - 记一次 tomcat7 报错
背景
博主时隔多年,再次进行 java 的开发,本地环境为 jdk1.8+IDEA+tomcat7+maven3.6,检出公司项目,运行报错,艰难排之
报错信息
ERROR 2019-03-06 09:31:23o.s.w.c.ContextLoaderContext initialization failed
org.springframework.beans.factory.BeanCreationException:
Error creating bean with name ''springSecurityFilterChain'' defined in class
org.springframework.security.config.annotation.web.configuration.WebSecurityConfiguration:
Bean instantiation via factory method failed; nested exception is
org.springframework.beans.BeanInstantiationException: Failed to instantiate [javax.servlet.Filter]:
Factory method ''springSecurityFilterChain'' threw exception; nested exception is
java.lang.IllegalStateException: HttpServletRequest.changeSessionId is undefined.
Are you using a Servlet 3.1+ environment?
搜索引擎限制了长度,所以博主只能一段一段的百度,试图找到相同遭遇的道友,奈何前面的一大坨都没有找到相似的,最后 Are you using a Servlet 3.1+ environment? 这段找到了一些信息
博主一想,有些道理,可能真是自己的 tomcat 太过老旧,遂安装最新 9.0,运行,成功。。。。。
总结
内在原因在截图中已经描述了,看来软件还是用最新的比较好
请关注我的订阅号
java – 如何在linux上升级Tomcat
我当前运行的Tomcat如下
Tomcat Version : Apache Tomcat/5.5.36
Servlet Specification Version : 2.4
JSP version : 2.0
我需要改成它
Tomcat Version : Apache Tomcat/8.0.14
Servlet Specification Version : 3.1
JSP version : 2.3
我下载了Tomcat版本8,我有以下内容,如何运行Tomcat 8并使其成为服务器的默认设置?
root@server [/opt]# ls
./ cpanel/ pcre/
../ curlssl/ PHP_with_imap_client/
apache-tomcat-8.0.18/ jdk1.7.0_75/ suPHP/
apache-tomcat-8.0.18.tar.gz jdk-7u75-linux-x64.tar.gz xml2/
我尝试了以下命令,但失败了.
root@server [/opt/apache-tomcat-8.0.18/bin]# ./startup.sh
Cannot find apache-tomcat-8.0.18/bin/setclasspath.sh
This file is needed to run this program
在〜/ .bashrc
# .bashrc
# User specific aliases and functions
alias rm='rm -i'
alias cp='cp -i'
alias mv='mv -i'
# Source global deFinitions
if [ -f /etc/bashrc ]; then
. /etc/bashrc
fi
JAVA_HOME="/usr/lib/jvm/jre-1.7.0-openjdk.x86_64"
export JAVA_HOME
PATH=$JAVA_HOME/bin:$PATH
export PATH
export CATALINA_HOME="apache-tomcat-8.0.18"
Java版本
java -version
java version "1.7.0_75"
OpenJDK Runtime Environment (rhel-2.5.4.0.el6_6-x86_64 u75-b13)
OpenJDK 64-Bit Server VM (build 24.75-b04,mixed mode)
root@server [/opt/apache-tomcat-8.0.18/bin]#
O / S
Linux server.myproject.com 2.6.32-220.13.1.el6.x86_64 #1 SMP Tue Apr 17
23:56:34 BST 2012 x86_64 x86_64 x86_64 GNU/Linux
export CATALINA_HOME =“/ opt / apache-tomcat-8.0.18”
如果您计划再次升级,可以考虑将$CATALINA_HOME设置为/ opt / tomcat,然后创建从/ opt / tomcat到/opt/apache-tomcat-8.0.18的符号链接或者您最终安装的任何未来版本.由于您可能有多个环境变量指向您的tomcat目录,因此在更新引用时会为您提供单个更改点.
ln -nsf /opt/apache-tomcat-8.0.18 / opt / tomcat
Linux(CentOS7)安装Tomcat与设置Tomcat为开机启动项(tomcat8为例)
安装Tomcat
下载Tomcat压缩包
Tomcat有Tomcat7,Tomcat8和Tomcat9等版本,目前企业使用较多的是Tomcat8,所以这里以Tomcat8为列
进入Tomcat8下载网址:Tomcat8下载网址https://tomcat.apache.org/download-80.cgi
点击左侧Download下的对应版本,这里我下载的是apache-tomcat-8.5.47.tar.gz,即Linux环境的压缩包
Tomcat主要有三个安装版本
- tar.gz:Linux环境下的压缩包,免安装
- Windows.zip:Windows压缩包,免安装,解压即用,同时注意根据自己电脑是64位系统还是32位系统下载对应的压缩包
- Windows Service Installer:Windows安装包,32位和64位版本的Windows系统都适用
安装Tomcat
将下载好的apache-tomcat-8.5.47.tar.gz
放到指定目录,我这里放到/usr/local/tomcat
,如下图所示
进入/usr/local/tomcat
目录,解压Tomcat压缩包
# 进入/usr/local/tomcat目录 cd /usr/local/tomcat # 解压Tomcat压缩包 tar -zxvf apache-tomcat-8.5.47.tar.gz
启动Tomcat
进入Tomcat的bin目录,启动Tomcat
# 进入Tomcat的bin目录,启动Tomcat cd apache-tomcat-8.5.47/bin/ # 启动Tomcat ./startup.sh
查看Tomcat是否启动成功
# 查看Tomcat是否启动成功执行 ps -ef | grep tomcat # 如果输出如下,说明Tomcat安装成功 root 2381 1 11 22:18 pts/0 00:00:02 /usr/local/jdk1.8.0_152/bin/java -Djava.util.logging.config.file=/usr/local/tomcat/apache-tomcat-8.5.47/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 /usr/local/tomcat/apache-tomcat-8.5.47/bin/bootstrap.jar:/usr/local/tomcat/apache-tomcat-8.5.47/bin/tomcat-juli.jar -Dcatalina.base=/usr/local/tomcat/apache-tomcat-8.5.47 -Dcatalina.home=/usr/local/tomcat/apache-tomcat-8.5.47 -Djava.io.tmpdir=/usr/local/tomcat/apache-tomcat-8.5.47/temp org.apache.catalina.startup.Bootstrap start root 2513 29060 0 22:18 pts/0 00:00:00 grep --color=auto tomcat
使用浏览器访问Tomcat,地址Linux的ip:8080,我这里的ip端口是http://47.106.106.158:8080/,如下图说明在Linux(CentOS7)环境安装启动Tomcat成功,为自己点一个赞
注意:开放8080端口或者关闭防火墙
附加:开放8080端口或者关闭防火墙,如果是阿里云只能在阿里云控制台配置开放端口
# 开启8080端口 firewall-cmd --zone=public --add-port=8080/tcp --permanent # 查询端口号8080是否开启 firewall-cmd --query-port=8080/tcp # 重启防火墙 firewall-cmd --reload # 查看开放端口列表 firewall-cmd --list-port # 命令含义 --zone #作用域 --add-port=8080/tcp #添加端口,格式为:端口/通讯协议 --permanent #永久生效,没有此参数重启后失效 # 关闭防火墙 systemctl stop firewalld.service #停止firewall systemctl disable firewalld.service #禁止firewall开机启动
设置Tomcat为开机启动项
按照上面的方式启动Tomcat,如果我们的虚拟机或者服务器关闭了,重启服务器后Tomcat是关闭的,但是我们希望虚拟机或者服务器重启后,Tomcat可以自己启动,所以我们需要设置Tomcat为开机启动项
创建setenv.sh文件,为Tomcat添加启动参数
catalina.sh在执行的时候会调用同级路径下的setenv.sh来设置额外的环境变量,因此在/usr/local/tomcat/apache-tomcat-8.5.47/bin路径下创建setenv.sh文件,内容如下:
# 设置Tomcat的PID文件 CATALINA_PID="$CATALINA_BASE/tomcat.pid" # 添加JVM选项 JAVA_OPTS="-server -XX:PermSize=256M -XX:MaxPermSize=1024m -Xms512M -Xmx1024M -XX:MaxNewSize=256m"
在/usr/local/tomcat/apache-tomcat-8.5.47/bin/catalina.sh
文件开头添加JAVA_HOME和JRE_HOME,其中/usr/local/jdk1.8.0_152为jdk的安装目录
export JAVA_HOME=/usr/local/jdk1.8.0_152 export JRE_HOME=/usr/local/jdk1.8.0_152/jre
如果在catalina.sh不配置JAVA_HOME和JRE_HOME就会报如下的错误
[root@JourWon ~]# systemctl status tomcat ● tomcat.service - Tomcat Loaded: loaded (/usr/lib/systemd/system/tomcat.service; enabled; vendor preset: disabled) Active: failed (Result: exit-code) since Mon 2019-10-21 19:54:54 CST; 6s ago Process: 8746 ExecStart=/usr/local/tomcat/apache-tomcat-8.5.47/bin/startup.sh (code=exited, status=1/FAILURE) Oct 21 19:54:54 JourWon systemd[1]: Starting Tomcat... Oct 21 19:54:54 JourWon startup.sh[8746]: Neither the JAVA_HOME nor the JRE_...d Oct 21 19:54:54 JourWon startup.sh[8746]: At least one of these environment ...m Oct 21 19:54:54 JourWon systemd[1]: tomcat.service: control process exited,...=1 Oct 21 19:54:54 JourWon systemd[1]: Failed to start Tomcat. Oct 21 19:54:54 JourWon systemd[1]: Unit tomcat.service entered failed state. Oct 21 19:54:54 JourWon systemd[1]: tomcat.service failed. Hint: Some lines were ellipsized, use -l to show in full.
在/usr/lib/systemd/system路径下添加tomcat.service文件,内容如下:
[Unit] Description=Tomcat After=network.target remote-fs.target nss-lookup.target [Service] Type=forking TimeoutSec=0 PIDFile=/usr/local/tomcat/apache-tomcat-8.5.47/tomcat.pid ExecStart=/usr/local/tomcat/apache-tomcat-8.5.47/bin/startup.sh ExecReload=/bin/kill -s HUP $MAINPID ExecStop=/bin/kill -s QUIT $MAINPID PrivateTmp=true [Install] WantedBy=multi-user.target
此外service文件修改后需要调用systemctl daemon-reload
命令重新加载。
配置TimeoutSec=0的目的是让开机启动不处理tomcat启动超时,保证tomcat耗时过长时不会被系统terminating,如果不配置可能出现下面的情况
Oct 21 20:26:37 JourWon startup.sh[1634]: Existing PID file found during start. Oct 21 20:26:37 JourWon startup.sh[1634]: Removing/clearing stale PID file. Oct 21 20:26:37 JourWon startup.sh[1634]: Tomcat started. Oct 21 20:26:37 JourWon systemd[1]: PID file /usr/local/tomcat/apache-tomcat-8.5.47/tomcat.pid not readable (yet?) after start. Oct 21 20:26:38 JourWon polkitd[464]: Unregistered Authentication Agent for unix-process:1628:19013 (system bus name :1.23, object path /org/freedesktop/PolicyKit1/AuthenticationAgent, loca Oct 21 20:28:07 JourWon systemd[1]: tomcat.service start operation timed out. Terminating. Oct 21 20:28:07 JourWon systemd[1]: Failed to start Tomcat.
把Tomcat加入开机自启动
systemctl enable tomcat.service
重启服务器
reboot
再次连接后,查看服务状态
[root@JourWon ~]# systemctl status tomcat ● tomcat.service - Tomcat Loaded: loaded (/usr/lib/systemd/system/tomcat.service; enabled; vendor preset: disabled) Active: activating (start) since Mon 2019-10-21 20:12:19 CST; 8s ago Process: 9244 ExecStart=/usr/local/tomcat/apache-tomcat-8.5.47/bin/startup.sh (code=exited, status=0/SUCCESS) CGroup: /system.slice/tomcat.service └─9255 /usr/local/jdk1.8.0_152/jre/bin/java -Djava.util.logging.config.file=/usr/local/tomcat/apache-tomcat-8.5.47/conf/logging.properties -Djava.util.logging.manager=org.apac... Oct 21 20:12:19 JourWon systemd[1]: Starting Tomcat... Oct 21 20:12:19 JourWon startup.sh[9244]: Existing PID file found during start. Oct 21 20:12:19 JourWon startup.sh[9244]: Removing/clearing stale PID file. Oct 21 20:12:19 JourWon startup.sh[9244]: Tomcat started. Oct 21 20:12:19 JourWon systemd[1]: PID file /usr/local/tomcat/apache-tomcat-8.5.47/tomcat.pid not readable (yet?) after start.
查看开机启动列表命令
systemctl list-unit-files | grep enabled
查看Tomcat是否设置为开机启动项,如果显示为enabled,说明设置成功
参数说明
- static:表示该服务与其他服务相关联,不能单独设置该服务的启动状态
- disabled:表示禁止开机启动
- enabled:表示允许开机启动
[root@JourWon ~]# systemctl list-unit-files | grep tomcat tomcat.service enabled
总结
以上所述是小编给大家介绍的Linux(CentOS7)安装Tomcat与设置Tomcat为开机启动项(tomcat8为例),希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!
- 阿里云服务器linux系统搭建Tomcat部署Web项目
- Linux云服务器安装JDK和Tomcat的详细步骤(推荐)
- 阿里云服务器安装配置tomcat 添加外网访问端口的教程
- Linux CentOS下安装Tomcat9及web项目的部署
- centos6配置tomcat8开机自启动脚本
- Centos8.2云服务器环境安装Tomcat8.5的详细教程
linux安装的是tomcat7,打开tomcat管理界面发现是tomcat6
linux安装的是tomcat7,打开tomcat管理界面发现是tomcat6?
今天关于记一次升级Tomcat和记一次升级仪式的介绍到此结束,谢谢您的阅读,有关3.1. 从零开始学 springboot - 记一次 tomcat7 报错、java – 如何在linux上升级Tomcat、Linux(CentOS7)安装Tomcat与设置Tomcat为开机启动项(tomcat8为例)、linux安装的是tomcat7,打开tomcat管理界面发现是tomcat6等更多相关知识的信息可以在本站进行查询。
本文标签: