在systemd中执行jar文件时强制工作目录
Forcing work directory when executing jar file in systemd
我正在尝试从 linux 中的 systemd 服务启动一个 jar。我正在执行的 jar 假定在当前目录中有一个 xml 文件。我使用 -config 参数传递该文件的名称。我创建的示例服务如下:
[Unit]
Description=my service
After=network.target
[Service]
Type=simple
Environment="xml_file_name=sample.xml"
ExecStart=/usr/bin/java -jar /path/to/jar/myapp.jar -config ${xml_file_name}
上面的服务文件放在/usr/lib/systemd/system目录下,名称为myservice.service。我正在执行以下命令来启动它:
systemctl daemon-reload
systemctl stop myservice.service
systemctl start myservice.service
systemctl status myservice.service
systemctl status myservice.service
命令显示 jar 文件 运行,但我的应用程序说找不到 ${xml_file_name}。
另外,我的jar说明是从/目录下执行的。我相信这是问题的一部分,因为 ${xml_file_name} 仅适用于 /path/to/jar/ 目录。
尝试过的事情:
-Xbootclasspath/p:"/path/to/jar/"
:添加 jars 的路径
位置,以便可以看到 ${xml_file_name}。
更改了 /path/to/jar/ 以确保它启用了所有可能的权限
我尝试在我的 systemd 服务的 [Service]
部分下添加 User=root
,但没有任何变化。无论哪种方式,机器上只有 root 用户,并且权限似乎都已签出。
让这更 st运行ge 的是,如果我 cd 到 / ,然后手动执行:
/usr/bin/java -jar /path/to/jar/myapp.jar -config sample.xml
一切都很好
有什么明显的我在这里遗漏的东西吗?是否可以告诉 systemd 服务,执行此 java jar,但要确保工作路径是 /path/to/jar/
而不是 /
?
尝试以下操作:
cd /path/to/jar && /usr/bin/java -jar /path/to/jar/myapp.jar -config sample.xml
如果你在Linux之类的系统中使用&&,它将两个命令组合在一起,只有在第一个命令成功执行后,第二个命令才会被执行。所以基本上它会先更改工作目录,然后 运行 来自已更改目录的 java jar 命令,这可能会解决问题。
为了解决这个问题,我最终在 [Service]
部分下使用了以下属性:
[Service]
...
WorkingDirectory=/path/to/jar
ExecStart=/usr/bin/java -jar my.jar -config sample.xml
问题解决了!
我正在尝试从 linux 中的 systemd 服务启动一个 jar。我正在执行的 jar 假定在当前目录中有一个 xml 文件。我使用 -config 参数传递该文件的名称。我创建的示例服务如下:
[Unit]
Description=my service
After=network.target
[Service]
Type=simple
Environment="xml_file_name=sample.xml"
ExecStart=/usr/bin/java -jar /path/to/jar/myapp.jar -config ${xml_file_name}
上面的服务文件放在/usr/lib/systemd/system目录下,名称为myservice.service。我正在执行以下命令来启动它:
systemctl daemon-reload
systemctl stop myservice.service
systemctl start myservice.service
systemctl status myservice.service
systemctl status myservice.service
命令显示 jar 文件 运行,但我的应用程序说找不到 ${xml_file_name}。
另外,我的jar说明是从/目录下执行的。我相信这是问题的一部分,因为 ${xml_file_name} 仅适用于 /path/to/jar/ 目录。
尝试过的事情:
-Xbootclasspath/p:"/path/to/jar/"
:添加 jars 的路径 位置,以便可以看到 ${xml_file_name}。更改了 /path/to/jar/ 以确保它启用了所有可能的权限
我尝试在我的 systemd 服务的
[Service]
部分下添加User=root
,但没有任何变化。无论哪种方式,机器上只有 root 用户,并且权限似乎都已签出。
让这更 st运行ge 的是,如果我 cd 到 / ,然后手动执行:
/usr/bin/java -jar /path/to/jar/myapp.jar -config sample.xml
一切都很好
有什么明显的我在这里遗漏的东西吗?是否可以告诉 systemd 服务,执行此 java jar,但要确保工作路径是 /path/to/jar/
而不是 /
?
尝试以下操作:
cd /path/to/jar && /usr/bin/java -jar /path/to/jar/myapp.jar -config sample.xml
如果你在Linux之类的系统中使用&&,它将两个命令组合在一起,只有在第一个命令成功执行后,第二个命令才会被执行。所以基本上它会先更改工作目录,然后 运行 来自已更改目录的 java jar 命令,这可能会解决问题。
为了解决这个问题,我最终在 [Service]
部分下使用了以下属性:
[Service]
...
WorkingDirectory=/path/to/jar
ExecStart=/usr/bin/java -jar my.jar -config sample.xml
问题解决了!