如何使用systemd启动jar文件

Jan*_*ith 1 linux shell bash shell-scripting

我想在系统启动时使用systemd. 我试图通过添加上面的脚本来做到这一点。但服务没有启动。

我的启动服务

[Unit]
Description=Startup

[Service]
ExecStart=/usr/local/sbin/my-startup.sh

[Install]
WantedBy=multi-user.target
Run Code Online (Sandbox Code Playgroud)

我的启动.sh

cd /var/www/test.com
nohup java -jar *.jar>test.out 2>test.err &
Run Code Online (Sandbox Code Playgroud)

但是服务器启动时应用程序没有启动。

? my-startup.service - Startup
   Loaded: loaded (/etc/systemd/system/my-startup.service; enabled; vendor preset: disabled)
   Active: inactive (dead) since Wed 2018-12-12 16:22:52 +0530; 27s ago
  Process: 650 ExecStart=/usr/local/sbin/my-startup.sh (code=exited, status=0/SUCCESS)
 Main PID: 650 (code=exited, status=0/SUCCESS)

Dec 12 16:22:52 localhost.localdomain systemd[1]: Started Startup.
Dec 12 16:22:52 localhost.localdomain systemd[1]: Starting Startup...
Run Code Online (Sandbox Code Playgroud)

Joh*_*ald 5

使用 systemd 指令代替 shell 会产生更一致的环境。这包括通过提供已知的完整路径来不依赖 $PATH 或工作目录。

既不&需要作业控制,也不SIGHUP 需要管理。systemd 服务单元已经在后台运行。

假设程序没有分叉,换句话说,java exec 继续运行,那就是 Type=simple

[Unit]
Description=something

[Service]
ExecStart=/usr/bin/java -jar /var/www/test.com/something.jar
StandardOutput=file:/var/log/something.out.txt
StandardError=file:/var/log/something.err.txt
Type=simple
WorkingDirectory=/var/www/test.com

[Install]
WantedBy=multi-user.target
Run Code Online (Sandbox Code Playgroud)