首页 新闻 会员 周边

Linux 上把 tomcat 做成服务,经常自动停止服务,怎么回事?

0
悬赏园豆:5 [已解决问题] 解决于 2024-03-28 15:56

欧拉服务器

把 tomcat 做成linux服务,运行几个月来都没毛病,前几天突然抽疯,发现只要一启动马上就会执行 ExecStop 后面的命令,导致服务根本无法使用。如果 systemctl stop tomcat 停止服务,改用命令行执行 catalina.sh run 来进行跟踪,发现 tomcat 明确告诉我说接收到停止指令,从而停止服务。

tomcat.service文件内容如下

[Unit]
Description=Tomcat Web Application Container
After=syslog.target network.target

[Service]
User=root
Group=root

Type=forking

Environment=JRE_HOME=/usr/java/latest
Environment=CATALINA_TMPDIR=/usr/lib/tomcat/temp
Environment=CATALINA_HOME=/usr/lib/tomcat
Environment=CATALINA_BASE=/usr/lib/tomcat

ExecStart=/usr/lib/tomcat/bin/startup.sh
ExecReload=/bin/kill HUB $MAINPID
ExecStop=/usr/lib/tomcat/bin/shutdown.sh

PrivateTmp=true

[Install]
WantedBy=multi-user.target
背锅狼的主页 背锅狼 | 初学一级 | 园豆:62
提问于:2024-03-18 14:25
< >
分享
最佳答案
0

在您提供的 tomcat.service 文件中,有几点可能导致Tomcat服务自动停止的问题:

ExecStart 和 ExecStop 行为不匹配:

您的 tomcat.service 文件中的 ExecStart 是指向 startup.sh 的,这是启动Tomcat的脚本。
而 ExecStop 是指向 shutdown.sh 的,这是关闭Tomcat的脚本。
Type=forking 表示systemd认为当ExecStart启动服务后,Tomcat会fork出一个进程并立即退出,此时它会执行 ExecStop,但实际上Tomcat并没有正常启动,导致立即被关闭。
Tomcat启动失败:

Tomcat启动可能失败,导致 systemd 认为服务启动失败而立即执行 ExecStop。
您可以检查 Tomcat 的日志文件(通常在 $CATALINA_HOME/logs 目录下)来查看启动失败的原因。
Environment 变量设置问题:

检查 JRE_HOME、CATALINA_TMPDIR、CATALINA_HOME 和 CATALINA_BASE 这些环境变量是否正确设置。如果设置不正确,可能会导致 Tomcat 启动失败。
解决方法:

检查 Tomcat 的日志文件,查看启动时是否有错误消息。您可以根据错误消息调整配置。
考虑将 Type 设置为 simple,而不是 forking,这样 systemd 将不会尝试在 Tomcat fork 出进程后立即终止服务。
确保 Environment 变量的设置是正确的,尤其是 $JAVA_HOME 和 Tomcat 的安装路径。
尝试手动在终端中运行 startup.sh 和 shutdown.sh 脚本,以确保它们能够正常工作,这将有助于排除问题。
最后,如果您尝试了上述解决方法仍然无法解决问题,请提供更多关于 Tomcat 启动失败的错误消息或日志内容,以便更好地帮助您解决问题。

收获园豆:5
Technologyforgood | 大侠五级 |园豆:5718 | 2024-03-18 19:47
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册