15

服务单位是:

[Unit]
Description=test
After=syslog.target
After=network.target

[Service]
Type=forking
ExecStart=/bin/java -jar /home/ec2-user/test.jar
TimeoutSec=300

[Install]
WantedBy=multi-user.target

它开始正常 1-4 分钟。但后来它失败了:

尾部/var/log/messages:

Feb 27 18:43:44 ip-172-31-40-48 systemd: Reloading.
Feb 27 18:44:06 ip-172-31-40-48 systemd: Starting test...
Feb 27 18:44:06 ip-172-31-40-48 java: 5.1.73
Feb 27 18:44:06 ip-172-31-40-48 java: Starting the internal [HTTP/1.1] server on port 8182
Feb 27 18:49:06 ip-172-31-40-48 systemd: test.service operation timed out.Terminating.
Feb 27 18:49:06 ip-172-31-40-48 systemd: test.service: control process exited, code=exited status=143
Feb 27 18:49:06 ip-172-31-40-48 systemd: Failed to start test.
Feb 27 18:49:06 ip-172-31-40-48 systemd: Unit test.service entered failed state.

systemctl status test.service(重新启动时 - 保持激活模式):

test.service - Setsnew
Loaded: loaded (/etc/systemd/system/test.service; enabled)
Active: activating (start) since Sun 2015-03-01 14:29:36 EST; 2min 30s ago
Control: 32462 (java)
CGroup: /system.slice/test.service

systemctl status test.service(失败后):

test.service - test
Loaded: loaded (/etc/systemd/system/test.service; enabled)
Active: failed (Result: exit-code) since Fri 2015-02-27 18:49:06 EST; 18min ago
Process: 27954 ExecStart=/bin/java -jar /home/ec2-user/test.jar (code=exited, status=143)
  • 在命令行中运行 jar 时它工作得很好。
  • 尝试更改 jar 位置,因为我认为这是权限问题
  • selinux 已关闭

我该如何解决这个问题,以便我可以在启动时启动 jar?有什么选择吗?(RHEL7 不包含服务命令)

4

1 回答 1

29

您创建了服务类型forking,但该服务没有分叉。它只是直接运行。因此,systemd 等待了 5 分钟,让程序自己守护进程,但它从来没有这样做过。此类服务的正确类型是simple.

您还禁用了 SELinux,这是您应该解决的另一个问题。

于 2015-06-09T00:25:55.840 回答