【发布时间】:2020-10-02 18:10:29
【问题描述】:
我有一个 Java 应用程序,我想创建一个系统服务来在启动时执行该 jar。我知道如何为 upstart 和 SysV 做这件事,但我在使用 systemd 时遇到了麻烦。
困难的部分是我需要从它所在的目录中执行 jar,以便它选择它旁边的application.properties,以及一些与 jar 位置相关的目录。
例如,假设如下结构:
+-var
+-myapp
+-app.jar
+-app.log
+-application.properties
+-certificate.jks
+-images
+-img1.jpg
我要执行jar的方式是:
$ cd /var/myapp
$ java -jar app.jar
所以当我在执行 jar 时位于 myapp 目录中时,它会记录到app.log,它会选择application.properties 并读取certificate.jks。它还可以找到目录images。
我已经尝试将此作为 systemd
的单元文件 [Unit]
Description=App Description
After=network.target
[Service]
Type=simple
User=sebasira
WorkingDirectory=/var/myapp
ExecStart=/usr/bin/java -jar app.jar
SuccessExitStatus=143
Restart=on-failure
[Install]
WantedBy=multi-user.target
它运行 jar 文件,但不是从 /var/myapp 内部运行
我该如何解决?
【问题讨论】:
-
有点像这个问题:stackoverflow.com/questions/34161656/… 但这对我不起作用
-
您尝试过我下面的简单(也许是天真的)解决方案吗?它曾经对我有用。
标签: java spring-boot service systemd