Systemd强制执行目录
Systemd force directory of execution
我有一个 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
因此,当我在 myapp 目录中执行 jar 时,它会记录到 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
中运行
我该如何解决?
制作一个 shell 脚本,如 /var/myapp:
#!/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
我有一个 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
因此,当我在 myapp 目录中执行 jar 时,它会记录到 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
我该如何解决?
制作一个 shell 脚本,如 /var/myapp:
#!/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