我一般对 Linux 不是很有经验,所以如果这对你来说很明显,请原谅我。
我对各种关键字组合进行了大量搜索,但找不到解决此问题的方法。
我已经在虚拟机上安装了仅命令行(核心)CentOS 7。
我已经安装了 java 并下载了 tomcat 9.0.14(我知道这不是最新版本)。我已经使用 systemd 将 tomcat 设置为作为服务运行,也就是说,我创建了一个文件:
/etc/systemd/system/tomcat.service
我不得不修改这篇文章大约 15 次,提交表单才不再认为这是垃圾邮件,所以我不得不删除很多我原本想包含的信息,比如我的 service.tomcat 文件中的内容。抱歉。我很想包含更多细节,但表单不允许我这样做。
这是 Linux 服务器上唯一的 Tomcat 实例。它安装在 /opt/tomcat/apache-tomcat-9.0.14,但我创建了一个名为“latest”的符号链接,因此可以将其引用为 /opt/tomcat/latest。
当我手动运行启动脚本时,Tomcat 可以正常启动,即:
cd /opt/tomcat/latest/bin
sudo ./startup.sh
当我这样做时,它会正确响应,并且我可以使用另一台计算机上的浏览器看到登录页面。
我还可以启动 tomcat 作为服务 - 使用以下命令手动启动该服务:
sudo systemctl start tomcat
如果我这样做,那么我可以看到 tomcat 正在工作并使用:
sudo systemctl status tomcat
说它正在工作。当以这种方式启动 tomcat 时,我也可以访问登录页面。因此,如果我使用上述命令手动启动服务,它将作为服务启动。
问题是,当我启动机器时,tomcat 没有启动。我不认为我只是没有引用该服务,相反,我相信它可能失败了(但我不是 100% 确定):
如果我重启电脑,tomcat 不会启动。如果我然后运行:
sudo systemctl status tomcat -l
我明白了:
tomcat.service - Apache Tomcat Web Application Container
Loaded: loaded (/etc/systemd/system/tomcat.service; enabled; vendor preset: disabled)
Active: failed (Result: exit-code) since Wed 2020-05-27 14:47:27 AEST; 3min 14s ago
Process: 1147 ExecStart=/opt/tomcat/latest/bin/startup.sh (code=exited, status=0/SUCCESS)
Main PID: 1168 (code=exited, status=1/FAILURE)
May 27 14:47:26 CentOS-7-NoGUI-Virgin systemd[1]: Starting Apache Tomcat Web Application Container...
May 27 14:47:27 CentOS-7-NoGUI-Virgin systemd[1]: Started Apache Tomcat Web Application Container.
May 27 14:47:27 CentOS-7-NoGUI-Virgin systemd[1]: tomcat.service: main process exited, code=exited, status=1/FAILURE
May 27 14:47:27 CentOS-7-NoGUI-Virgin systemd[1]: Unit tomcat.service entered failed state.
May 27 14:47:27 CentOS-7-NoGUI-Virgin systemd[1]: tomcat.service failed.
从 tomcat 失败这一事实来看,我认为问题不在于我没有告诉 CentOS 启动该服务。相反,我认为它正在尝试启动该服务,但没有工作。
如果我然后手动执行:
sudo systemctl start tomcat
我没有收到任何文本返回,但随后如果我这样做:
sudo systemctl status tomcat -l
它显示 tomcat 正在运行。我很想包含命令的确切输出,但我不得不在多次修改中将其删除,以使提交表单不会认为这是垃圾邮件。
我相信我已经正确设置了 tomcat 服务,使其在系统启动时启动,方法如下:
sudo systemctl daemon-reload
sudo systemctl enable tomcat
我尝试使用 journalctl -xe 来查看我是否能了解服务在启动时无法启动的原因,但我在该命令的结果中找不到任何可以解释为什么会发生这种情况的内容。如果有帮助的话,我很乐意提供(非常长的)输出。
tomcat.service 文件包含以下内容:(我不得不删除此文件的内容,即使它被标记为代码,因为提交表单坚持认为我的帖子看起来像垃圾邮件。唉)
我在用户主文件夹的 .bashrc 文件中设置了以下内容:
export CATALINA_HOME=/opt/tomcat/latest
我想知道,当服务在启动时启动时,如果它不是以我的用户身份运行,那么它是否可能无法以某种方式访问这个变量?
实际的启动脚本(在 tomcat.service 文件中引用)是 /opt/tomcat/latest/bin/startup.sh 。它包含默认内容,我没有以任何方式修改它。
再次,上述脚本运行并启动 tomcat。我甚至可以通过手动输入 sudo systemctl start tomcat 将 tomcat 作为服务启动。
它只是不会在启动时启动。
我执行了 sudo yum check-update,然后执行了 sudo yum install update。我这样做是为了将 CentOS 7 更新到最新版本。我在安装 tomcat 后执行了此操作,这是我经历过的故障排除过程的一部分。这似乎没有帮助。
如果有人能建议解决方案或下一步应尝试的故障排除步骤,我将不胜感激。例如,我不确定如何检查 Linux 机器上的启动过程,特别是查找无法启动的服务及其原因。
诚挚的问候,斯宾塞。
答案1
Java 中的安全设置可能是原因
“java.home/lib/security/java.policy” catalina 有自己的安全设置” 请参阅 tomcat/conf/catalina.policy