在systemd中执行jar文件时强制工作目录

ang*_*yip 5 java linux daemon init 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/":预先添加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//?相反?

ang*_*yip 23

为了解决这个问题,我最终在以下[Service]部分使用了以下属性:

[Service] ... WorkingDirectory=/path/to/jar ExecStart=/usr/bin/java -jar my.jar -config sample.xml

解决了这个问题!