从 Systemd 运行 Java 进程

从 Systemd 运行 Java 进程

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

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

#!/bin/bash
java -jar -Dresources=/home/pruss/dev/ServerDeploy5-4.1/Server/resources/MyServer.jar "0" "Test"

在内部/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

结果

Job for myService.service failed. See "systemctl status myService.service" and "journalctl -xn" for details.

我尝试:

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)

答案1

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

ExecStart=/usr/bin/java -jar /home/pruss/dev/ServerDeploy5-4.1/Server/resources/MyServer.jar

适用于 CentOS 7.2。

答案2

不确定是谁对此表示反对。

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

上面所见的内容是有效的。但是,最终的服务如下:

[Unit]
Description=MyProgramThing
[Service]
ExecStart=/home/prus/dev/Blah-4.1/Server/runServer.sh
Type=simple
User=prus
[Install]
WantedBy=multi-user.target

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

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

答案3

看看我在 stackoverflow 上的回答,其中详细说明了如何systemd为 Java 应用程序创建服务:

https://stackoverflow.com/a/22121547/272180

答案4

您可能需要添加 WorkingDirectory= 以便它知道从哪里运行。

相关内容