欧拉服务器
把 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
在您提供的 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 启动失败的错误消息或日志内容,以便更好地帮助您解决问题。