我试图在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/"
:预先添加jar位置的路径,以便可以看到$ {xml_file_name}.
将/ path /更改为/ jar /以确保它已启用所有可能的权限
我尝试User=root
在[Service]
我的systemd服务部分添加,但它没有改变.无论哪种方式,只有root用户在计算机上,并且权限似乎都检查出来.
是什么让这更奇怪的是,如果我cd到/,然后手动执行:
/usr/bin/java -jar /path/to/jar/myapp.jar -config sample.xml
一切话都很好.
有什么明显的东西我在这里不见了吗?是否有可能告诉systemd服务,执行这个java jar,但确保工作路径/path/to/jar/
与/
?相反?
为了解决这个问题,我最终在以下[Service]
部分使用了以下属性:
[Service]
...
WorkingDirectory=/path/to/jar
ExecStart=/usr/bin/java -jar my.jar -config sample.xml
解决了这个问题!