Java Systemd强制执行目录
我有一个Java应用程序,我想创建一个系统服务来在启动时执行jar。我知道如何为新贵和SysV做这件事,但我在systemd方面遇到了麻烦 困难的部分是,我需要从jar所在的目录中执行jar,这样它就可以选择它旁边的Java Systemd强制执行目录,java,spring-boot,service,systemd,Java,Spring Boot,Service,Systemd,我有一个Java应用程序,我想创建一个系统服务来在启动时执行jar。我知道如何为新贵和SysV做这件事,但我在systemd方面遇到了麻烦 困难的部分是,我需要从jar所在的目录中执行jar,这样它就可以选择它旁边的application.properties,以及一些与jar位置相关的目录 例如,假设以下结构: +-var +-myapp +-app.jar +-app.log +-application.properties +-
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
。它还可以找到目录图像
我尝试将此作为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
如何解决它?制作一个类似于/var/myapp的shell脚本:
#!/bin/sh
# runMyJar.sh
java -Djava.awt.headless=true -jar /var/myapp/app.jar
当然,要使其可执行
然后将其配置为启动时分叉的服务:
[Unit]
Description=My App Jar
[Service]
Type=forking
ExecStart=/var/myapp/runMyJar.sh
[Install]
WantedBy=multi-user.target
根据需要添加其他systemd选项
jar文件应以/var/myapp作为默认主目录或工作区目录执行
编辑(基于@sebasira评论) 以下
.sh
脚本也可用于此systemd配置:
#!/bin/sh
# runMyJar.sh
cd /var/myapp/;java -jar app.jar
不知怎的,这是一个问题:但这对meDid不起作用。你试试下面我的简单(也许是幼稚)解决方案?它曾经为我工作。嗨!谢谢对不起,我还没有试过,给我两个小时谢谢!我在你的指导下成功了。我只是将脚本从runMyJar.sh更改为
cd/var/myapp/;java-jar app.jar