我正在尝试从 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 应用程序创建服务:
答案4
您可能需要添加 WorkingDirectory= 以便它知道从哪里运行。