我的应用程序以Debians身份部署并开始使用systemd服务。该应用程序随机崩溃。我找不到崩溃的原因。
我有4个正在运行的应用程序[使用java
,scala
构建,其中两个应用程序被杀死(分别命名为op
和common
)。所有这些都使用systemd服务开始。
syslog上的错误是
Jul 22 11:45:44 misqa mosquitto [2930]:客户端上的套接字错误 005056b76983-公用,断开连接
Jul 22 11:45:44 misqa systemd [1]:commonmod.service:主流程 退出,代码=退出,状态= 143 / n / a
7月22日11:45:44 misqa systemd [1]:commonmod.service:输入了单位 失败状态
Jul 22 11:45:44 misqa systemd [1]:commonmod.service:失败于 结果“退出代码”
7月22日11:45:44 misqa systemd [1]:opmod.service:主进程已退出, 代码=退出,状态= 143 / n / a
7月22日11:45:44 misqa systemd [1]:opmod.service:设备输入失败 州
Jul 22 11:45:44 misqa systemd [1]:opmod.service:结果失败 “退出代码”
但是我的op
和common
的应用程序日志文件都没有错误
当我阅读更多内容时,我了解到崩溃的原因是由于SIGTERM
命令引起的,但无法找出导致它的原因。在这些应用程序中的任何一个中,我都没有killall
的exec命令。
无论如何,有没有找出哪个进程正在杀死我的应用程序。
我的systemd服务是这样的:
[Unit]
Description=common Module
After=common-api
Requires=common-api
[Service]
TimeoutStartSec=0
ExecStart=/usr/bin/common-api
[Install]
WantedBy=multi-user.target
答案 0 :(得分:0)
基本上,当响应SIGTERM而关闭时,Java程序有时不返回预期的退出状态。
您应该能够通过将退出代码作为“成功”退出状态添加到systemd服务文件中来抑制这种情况:
[Service]
SuccessExitStatus=143
此解决方案成功应用于Java应用程序here (serverfault)和here (stasckoverflow)。