从 Systemd 运行 Java 进程

wax*_*cal 19 linux java systemd

我正在尝试从 systemd 执行 shell 脚本。该脚本从命令行运行良好。

脚本 (runServer.sh) 运行一个 Java 进程,如下所示:

#!/bin/bash
java -jar -Dresources=/home/pruss/dev/ServerDeploy5-4.1/Server/resources/MyServer.jar "0" "Test"
Run Code Online (Sandbox Code Playgroud)

在内部/usr/lib/systemd/system(或/lib/systemd/system/在其他操作系统上)我创建了一个服务文件 (myService.service):

[Unit]
Description=My Servers service
[Service]
ExecStart=/home/pruss/dev/ServerDeploy5-4.1/Server/runServer.sh
User=root
Type=oneshot
[Install]
WantedBy=multi-user.target
Run Code Online (Sandbox Code Playgroud)

结果

Job for myService.service failed. See "systemctl status myService.service" and "journalctl -xn" for details.
Run Code Online (Sandbox Code Playgroud)

我尝试:

systemctl status myService.service


   Loaded: loaded (/usr/lib/systemd/system/myService.service; disabled)
   Active: failed (Result: exit-code) since Thu 2015-07-23 12:27:38 BST; 26s ago
   Main PID: 28413 (code=exited, status=203/EXEC)
Run Code Online (Sandbox Code Playgroud)

sil*_*tar 14

您可能不需要 shell 脚本。如果您使用 java 二进制文件和 jar 文件的完整路径,您可以从 myService.service 文件启动该进程。它应该看起来像

ExecStart=/usr/bin/java -jar /home/pruss/dev/ServerDeploy5-4.1/Server/resources/MyServer.jar
Run Code Online (Sandbox Code Playgroud)

适用于 CentOS 7.2。


wax*_*cal 10

不知道谁给了这个大拇指。。

我找到了解决方案并将其发布以节省其他人的努力。

你在上面看到的工作。然而,最终的服务是这样的:

[Unit]
Description=MyProgramThing
[Service]
ExecStart=/home/prus/dev/Blah-4.1/Server/runServer.sh
Type=simple
User=prus
[Install]
WantedBy=multi-user.target
Run Code Online (Sandbox Code Playgroud)

重要的是,在我的 shell 脚本中,我需要放入 .jar 文件的完整路径。java -jar /home/myprog.jar 等

即 ./myJar.jar 不起作用。希望有帮助。