我已经研究了一段时间了。我看过多篇关于这个问题的文章。这是最近的一次:
centos 7上的tomcat 8不作为服务启动(但它是手动启动的……)
区别在于我运行的是tomcat9.0.33。详情如下:
java version "1.8.0_121"\
Java(TM) SE Runtime Environment (build 1.8.0_121-b13)\
Java HotSpot(TM) 64-Bit Server VM (build 25.121-b13, mixed mode)\
Tomcat 9.0.33
NAME="CentOS Linux"\
VERSION="7 (Core)"\
ID="centos"\
ID_LIKE="rhel fedora"\
VERSION_ID="7"\
PRETTY_NAME="CentOS Linux 7 (Core)"\
ANSI_COLOR="0;31"\
CPE_NAME="cpe:/o:centos:centos:7"\
HOME_URL="https://www.centos.org/"\
BUG_REPORT_URL="https://bugs.centos.org/"\
CENTOS_MANTISBT_PROJECT="CentOS-7"\
CENTOS_MANTISBT_PROJECT_VERSION="7"\
REDHAT_SUPPORT_PRODUCT="centos"\
REDHAT_SUPPORT_PRODUCT_VERSION="7"\
顺便说一句,直到最近,一切都正常开始,没有任何问题。据我所知,环境没有任何重大变化。但是,当我最近运行“systemctl restart”命令时,启动开始失败。Tomcat9.0.33有5个示例在不同的端口和路径上运行,这些都没有改变。我还没有重新启动示例中的两个(怕它们启动不了),其他三个完全启动不了。详情如下:
Systemd unit file for tomcat\
[Unit]\
Description=Apache Tomcat Web Application Container in Liferay 7.32 TEST for UAT\
After=syslog.target network.target
[Service]\
Type=forking
Environment=JAVA_HOME=/opt/jdk1.8.0_121/jre\
Environment=CATALINA_PID=/opt/liferay/uatapi/liferay-ce-portal-7.3.2-ga3/tomcat-9.0.33/temp/tomcat.pid\
Environment=CATALINA_HOME=/opt/liferay/uatapi/liferay-ce-portal-7.3.2-ga3/tomcat-9.0.33\
Environment=CATALINA_BASE=/opt/liferay/uatapi/liferay-ce-portal-7.3.2-ga3/tomcat-9.0.33\
Environment='CATALINA_OPTS=-Xms1024m -Xmx2048m -XX:+UseParNewGC -XX:+UseConcMarkSweepGC -XX:+CMSParallelRemarkEnabled -XX:SurvivorRatio=20 -XX:ParallelGCThreads=8 -server -Xdebug -Xrunjdwp:transport=dt_socket,address=5000,server=y,suspend=n'\
Environment='JAVA_OPTS=-Djava.awt.headless=true -Djava.security.egd=file:/dev/./urandom -Duser.timezone=GMT -Dfile.encoding=UTF-8'
ExecStart=/opt/liferay/uatapi/liferay-ce-portal-7.3.2-ga3/tomcat-9.0.33/bin/startup.sh\
ExecStop=/bin/kill -15 $MAINPID
User=tomcat\
Group=tomcat\
UMask=0007
[Install]\
WantedBy=multi-user.target\
运行systemctl start liferayuat时的结果
● liferayuat.service - Apache Tomcat Web Application Container in Liferay 7.32 TEST for UAT\
Loaded: loaded (/etc/systemd/system/liferayuat.service; enabled; vendor preset: disabled)\
Active: failed (Result: exit-code) since Sat 2020-12-05 08:44:08 CST; 3s ago\
Process: 10891 ExecStop=/bin/kill -15 $MAINPID (code=exited, status=1/FAILURE)\
Process: 10851 ExecStart=/opt/liferay/uatapi/liferay-ce-portal-7.3.2-ga3/tomcat-9.0.33/bin/startup.sh \(code=exited, status=0/SUCCESS)\
Main PID: 10861 (code=exited, status=0/SUCCESS)
Dec 05 08:44:08 systemd[1]: Starting Apache Tomcat Web Application Container in Liferay 7.32 TEST for UAT...\
Dec 05 08:44:08 startup.sh[10851]: Existing PID file found during start.\
Dec 05 08:44:08 startup.sh[10851]: Removing/clearing stale PID file.\
Dec 05 08:44:08 startup.sh[10851]: Tomcat started.\
Dec 05 08:44:08 systemd[1]: Started Apache Tomcat Web Application Container in Liferay 7.32 TEST for UAT.\
Dec 05 08:44:08 systemd[1]: liferayuat.service: control process exited, code=exited status=1\
Dec 05 08:44:08 systemd[1]: Unit liferayuat.service entered failed state.\
Dec 05 08:44:08 systemd[1]: liferayuat.service failed.
卡塔琳娜唯一的事情是:
Listening for transport dt_socket at address: 5000\
java.lang.ClassNotFoundException: org.apache.catalina.startup.Catalina\
at java.net.URLClassLoader.findClass(URLClassLoader.java:381)\
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)\
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)\
at org.apache.catalina.startup.Bootstrap.init(Bootstrap.java:261)\
at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:443)\
因此,当我用systemctl start启动示例时,它将失败。但是如果我运行这个命令(作为root…),那么它将启动:
/opt/liferay/uatapi/liferay-ce-portal-7.3.2-ga3/tomcat-9.0.33/bin/startup.sh
如果我以tomcat的形式运行完整的命令,它不会以相同的错误开始。因此,问题似乎是权限。tomcat用户和组是所有文件和文件夹的所有者。但是,不知何故,tomcat用户要么没有权限,要么路径被阻塞,这样类文件就找不到了。我遵循了上面提到的文章中的建议,但是修改没有影响。
我无意中看到一篇关于selinx的文章,它似乎指向了一个问题。以下是selinux设置:
selinux状态:已启用
selinux装载:/sys/fs/selinux
selinux根目录:/etc/selinux
加载的策略名称:目标
当前模式:允许
配置文件中的模式:允许
策略mls状态:已启用
策略拒绝\u未知状态:允许
最大内核策略版本:31
保持示例运行的解决方法只是手动启动它们,但是是什么导致systemctl start不起作用呢?我怀疑有权限,但我也不明白为什么,因为所有的东西都归我所有tomcat:tomcat
1条答案
按热度按时间hgtggwj01#
所以,这是自找的,就像大多数“谜团”一样。我仍然无法解释我在selinux上下文中看到的一些差异,但真正的原因(对我来说)是微妙的。对{tomcat root}/lib和{tomcat root}/lib/ext的权限没有执行权限。这可能是由于最近添加了一个jar,然后需要由所有者和权限进行更新。在任何情况下,最初的问题导致了许多尝试和错误的尝试来修复它,这使问题更加复杂。
我通过逐个文件夹、逐个文件比较工作示例和非工作示例,找到了解决方案。很显然,新的jar和所有者/权限更改应用于除生产版本之外的所有版本。
谢谢你的建议。