linux - jar 文件的 Systemd 服务在几分钟后出现 "operation timed out"错误或停留在 "activating mode"

标签 linux jar systemd rhel7 selinux

服务单位是:

[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 不包含服务命令)

最佳答案

您创建了服务类型forking,但此服务没有fork。它只是直接运行。因此 systemd 等了五分钟让程序自行守护,但它从未这样做过。这种服务的正确类型是 simple

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

关于linux - jar 文件的 Systemd 服务在几分钟后出现 "operation timed out"错误或停留在 "activating mode",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28776520/

相关文章:

android - linux 中/dev/kmem char 设备的真正用途是什么?

java - 动态加载的 jar 中的 getResourceAsStream

java - 如何清除 Java 缓存中的特定文件?

linux - 更改 cgroup pid.max 值?

gunicorn - 由于gunicorn,airflow systemd 失败

java - 将编译错误打印到磁盘中的文件

c++ - 如何从 Linux 二进制文件中存储和检索数据

python - 重新加载与重新启动 uWSGI 以激活代码更改

我们可以使用不带 usleep() 的咨询记录锁定在父子之间交替吗?

java - 命令行 Java + Jar 文件