将 jar 文件作为 systemd 服务运行时出现 Exec 格式错误

问题描述 投票:0回答:1

我在将 jar 应用程序作为 systemd 服务运行时遇到问题。我收到此错误:

systemd[30196]: Failed at step EXEC spawning /opt/java_apps/app1/app1.jar: Exec format error

但是当我使用 java -jar 命令手动运行它时,它运行良好。

我已经验证了目录和文件的权限,jar是使用相同的java版本构建的...

app1.服务:

[Unit]
Description=APP1 Java Service
After=syslog.target

[Service]
User=app1_user
ExecStart=/opt/java_apps/app1/app1.jar
StandardError=null
StandardOutput=null
LimitNOFILE=65536
Environment=JAVA_HOME=/opt/java/jdk-17.0.7+7
SuccessExitStatus=143

[Install]
WantedBy=multi-user.target

app1.conf:

JAVA_OPTS="-Dspring.config.location=/opt/java_apps/app1/conf/ \
-Dlogging.config=/opt/java_apps/app1/conf/logback.xml \
-Dfile.encoding=UTF-8 \
-server -Xms2g \
-Xmx2g \
-Xmn400m \
-XX:MetaspaceSize=256m \
-XX:MaxMetaspaceSize=256m \
-XX:+PrintConcurrentLocks -verbosegc -XX:+UseCompressedOops -XX:+HeapDumpOnOutOfMemoryError \
-XX:+UseGCOverheadLimit -Xlog:gc:/var/log/java_apps/app1/gc-app1-2_%t.log \
-XX:HeapDumpPath=/var/log/heapdump \
-XX:ErrorFile=/var/log/java_apps/app1/hs_err_%t.log \
-Djdk.tls.maxCertificateChainLength=100 \
-Dorg.xerial.snappy.tempdir=/opt/java_apps/snappy"

我想要一个将 app1.jar 作为 systemd 服务运行的解决方案。

java operating-system systemd
1个回答
0
投票

这对我有用。棘手

[Unit]
Description=APP1 Java Service
After=syslog.target

[Service]

Environment="JAVA_HOME=/usr/lib/jvm/bellsoft-java20-full-amd64"
WorkingDirectory=/opt/java_apps/app1
User=app1_user
ExecStart=/usr/bin/env "${JAVA_HOME}/bin/java" -jar app1.jar
StandardError=null
StandardOutput=null
LimitNOFILE=65536
SuccessExitStatus=143

[Install]
WantedBy=multi-user.target

当然,

StandardError=null
是危险的,因为如果它失败了,你永远不会明白为什么。您可能想要
StandardError=journal

© www.soinside.com 2019 - 2024. All rights reserved.