当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《在systemd中执行jar文件时强制工作目录》经验,为你挑选了1个好方法。

我试图在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//?相反?



1> angryip..:

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

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

解决了这个问题!

推荐阅读
jerry613
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有