【发布时间】:2020-12-02 05:34:51
【问题描述】:
我在 Centos Dist 上遇到了一个奇怪的行为,试图运行使用 spring boot 创建的可引导 jar。
如果我从 shell 运行 jar 应用程序,它会完美运行
使用以下配置创建的服务运行应用程序时:
[Unit]
Description=app
After=syslog.target
[Service]
ExecStart=/foo/bar/app.jar
SuccessExitStatus=143
[Install]
WantedBy=multi-user.target
~
我不断收到错误“无法找到 Java”
我检查了 $PATH 和 $JAVA_HOME 属性并且它们设置正确(我不认为这会增加更多信息,因为可引导 jar 可以在没有服务的情况下正确运行)
我做错了什么?在这个问题上搞砸了 3 天,这让我很生气。
【问题讨论】:
-
你在哪里设置 PATH?
-
你是如何启动服务的?如果您使用 sudo 运行,请确保这些变量也为 root 用户配置,否则为当前用户。
-
这样做:echo $PATH /usr/lib/jvm/jdk-14.0.2/bin:/usr/lib/jvm/jdk-14.0.2/bin:/usr/lib/jvm /jdk-14.0.2/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
-
我正在使用 systemctl start foo.service 运行它。我一直在运行的用户是root。
-
systemd 不在用户上下文中运行,PATH 没有被继承。将PATH添加到
.service文件的[Service]部分:Environment=PATH=/usr/lib/jvm/jdk-14.0.2/bin:/usr/lib/jvm/jdk-14.0.2/bin:/usr/lib/jvm/jdk-14.0.2/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin,并重新加载服务(systemctl daemon-reload),然后启动服务。这应该可以解决问题。根本问题是java没有集成操作系统(默认路径中没有java)。
标签: java spring-boot centos systemctl