Java 如何与SDKMan一起使用system.d服务

Java 如何与SDKMan一起使用system.d服务,java,nexus,systemd,nexus3,sdkman,Java,Nexus,Systemd,Nexus3,Sdkman,我正试图通过system.d将Sonatype Nexus 3作为服务安装,但由于未设置INSTALL4J_JAVA_HOME(或者至少,Sonatype Nexus 3声称是systemctl),因此安装失败。我用SDKMan!()来管理我的Java安装。我正在按照Sonatype的说明进行操作 我可以在bashshell中以run\u as\u user中指定的用户身份运行它,没有任何困难 如何使SDKman提供的java home环境变量对system.d可见?TL:DR;要解决此问题,请

我正试图通过system.d将Sonatype Nexus 3作为服务安装,但由于未设置INSTALL4J_JAVA_HOME(或者至少,Sonatype Nexus 3声称是systemctl),因此安装失败。我用SDKMan!()来管理我的Java安装。我正在按照Sonatype的说明进行操作

我可以在bashshell中以
run\u as\u user
中指定的用户身份运行它,没有任何困难


如何使SDKman提供的java home环境变量对system.d可见?

TL:DR;要解决此问题,请在system.d服务文件中添加一个
Environment
部分:

[Service]
Environment="INSTALL4J_JAVA_HOME=/home/nexus/.sdkman/candidates/java/current/"
长答覆:

在撰写本文时,Sonatype文档说使用以下文件作为
/etc/systemd/system/nexus.service
文件,如果您通过系统发行版向服务用户安装java,这将非常有效(确保发行版的java主页由系统管理)。这不能解决我的问题:

[Unit]
Description=nexus service
After=network.target

[Service]
Type=forking
LimitNOFILE=65536
ExecStart=/opt/nexus/bin/nexus start
ExecStop=/opt/nexus/bin/nexus stop
User=nexus
Restart=on-abort
TimeoutSec=600

[Install]
WantedBy=multi-user.target
要解决此问题,您必须将环境变量添加到system.d服务文件中(将您的_用户替换为您正在运行的nexus用户,并将nexus安装位置替换为
/opt/nexus
):

[Unit]
Description=nexus service
After=network.target

[Service]
Environment="INSTALL4J_JAVA_HOME=/home/your_user/.sdkman/candidates/java/current/"
Type=forking
LimitNOFILE=65536
ExecStart=/opt/nexus/bin/nexus start
ExecStop=/opt/nexus/bin/nexus stop
User=your_user
Restart=on-abort
TimeoutSec=600

[Install]
WantedBy=multi-user.target