Java TOME嵌入式站点作为systemctl服务

Java TOME嵌入式站点作为systemctl服务,java,maven,tomcat,apache-tomee,systemctl,Java,Maven,Tomcat,Apache Tomee,Systemctl,我在我们的一个项目中有一些令人困惑的行为。我们构建了一个maven项目,该项目由git启动。在我们的项目中,我们使用tomee embedded(v.8.0.0)在不同的环境中启动和运行应用程序,只需几个命令。到目前为止,效果相当不错 实际上,我们想在服务器上部署它,所以我们做了git clone…和mvn clean install-tomee-embedded:run,效果非常好 为了获得一些测试经验,我们希望让应用程序作为服务运行,因此我们创建了一个systemd服务,其中包含: [Uni

我在我们的一个项目中有一些令人困惑的行为。我们构建了一个maven项目,该项目由git启动。在我们的项目中,我们使用tomee embedded(v.8.0.0)在不同的环境中启动和运行应用程序,只需几个命令。到目前为止,效果相当不错

实际上,我们想在服务器上部署它,所以我们做了
git clone…
mvn clean install-tomee-embedded:run
,效果非常好

为了获得一些测试经验,我们希望让应用程序作为服务运行,因此我们创建了一个systemd服务,其中包含:

[Unit]
Description=[… our description …]
After=network-online.target

[Service]
ExecStart = /bin/bash -c '/usr/share/maven/bin/mvn clean install tomee-embedded:run -f [path/to/our/application]
Restart=on-failure

User=root ## necessary to run on port 80.
WorkingDirectory=[onceagain/path/to/our/application]

[Install]
WantedBy=multi-user.target

到目前为止,这也很好,当我们启动我们的服务时,它运行maven的东西,构建我们的应用程序并启动我们的tomcat,但随后它立即停止运行日志:

[INFO] TomEE embedded started on localhost:8080
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 27.717 s
[INFO] Finished at: 2019-12-03T10:28:16+01:00
[INFO] Final Memory: 56M/204M
[INFO] ------------------------------------------------------------------------
[INFO] Stopping ProtocolHandler ["http-nio-8080"]
[INFO] Pausing ProtocolHandler ["http-nio-8080"]
[INFO] Pausing ProtocolHandler ["https-jsse-nio-8443"]
[INFO] Stopping service [Tomcat]Dez 03 10:28:17 h2790697.stratoserver.net rhorun.sh[31795]: org.apache.catalina.LifecycleException: Failed to stop component [StandardEngine[Tomcat]]
at org.apache.catalina.util.LifecycleBase.handleSubClassException(LifecycleBase.java:440)
at org.apache.catalina.util.LifecycleBase.stop(LifecycleBase.java:267)
at org.apache.catalina.core.StandardService.stopInternal(StandardService.java:473)
at org.apache.catalina.util.LifecycleBase.stop(LifecycleBase.java:257)
at org.apache.catalina.core.StandardServer.stopInternal(StandardServer.java:994)
at org.apache.catalina.util.LifecycleBase.stop(LifecycleBase.java:257)
at org.apache.catalina.startup.Tomcat.stop(Tomcat.java:466)
at org.apache.tomee.embedded.Container.stop(Container.java:846)
at org.apache.openejb.maven.plugins.TomEEEmbeddedMojo$2.run(TomEEEmbeddedMojo.java:425)
Dez 03 10:28:17 h2790697.stratoserver.net rhorun.sh[31795]: Caused by: java.lang.NoClassDefFoundError: org/apache/catalina/core/ContainerBase$StopChild
at org.apache.catalina.core.ContainerBase.stopInternal(ContainerBase.java:976)
at org.apache.catalina.util.LifecycleBase.stop(LifecycleBase.java:257)
... 7 more
Dez 03 10:28:17 h2790697.stratoserver.net rhorun.sh[31795]: Caused by: java.lang.ClassNotFoundException: org.apache.catalina.core.ContainerBase$StopChild
at org.codehaus.plexus.classworlds.strategy.SelfFirstStrategy.loadClass(SelfFirstStrategy.java:50)
at org.codehaus.plexus.classworlds.realm.ClassRealm.unsynchronizedLoadClass(ClassRealm.java:271)
at org.codehaus.plexus.classworlds.realm.ClassRealm.loadClass(ClassRealm.java:247)
at org.codehaus.plexus.classworlds.realm.ClassRealm.loadClass(ClassRealm.java:239)
... 9 more
因此,看起来maven构建正确,tomcat启动正确,但在tomcat启动完成后,程序立即完成,tomcat再次停止。如果运行
sudo mvn clean install tomee embedded:run
,则不会出现这种行为


是否有人可以帮助我们?

因此,由于一些项目压力,我们建立了一个快速且肮脏的解决方案,目前该解决方案有效:
我们将maven命令移动到
屏幕
,并让它在后台运行。正在执行的脚本ist将
@reboot
作为cronjob处理,以便在需要重新启动机器时也让服务器运行

提前给出一个小提示:我们还尝试在没有/bin/bash的情况下使用
ExecStart
,并使用mvn的完整路径。没有效果。