作为 systemd 服务的 jvm 应用程序 运行 的退出代码

Exit code of a jvm application running as a systemd service

我是 运行 一个用 scala 编写的应用程序(运行 在 jvm 上)作为系统服务配置 ExecStart=java -jar Darts-Backend-assembly-0.1.0.jar

systemctl stop darts 上,应用程序通过发送 SIGTERM 信号终止。 journalctl 将被 SIGTERM 终止的应用程序的非零退出代码解释为失败:

Feb 25 13:10:00 DartberryPi systemd[1]: darts.service: Main process exited, code=exited, status=143/n/a
Feb 25 13:10:00 DartberryPi systemd[1]: darts.service: Failed with result 'exit-code'.

据我所知,在接收到例如SIGTERM 信号。似乎也没有办法将 systemd 配置为接受 143 作为进程的成功终止,并且仍然将所有其他非零退出代码解释为失败。

目标是将 SIGTERM 终止解释为成功终止,而其他终止(例如来自未处理的异常等实际故障)仍记录为失败。

有人知道解决这个问题的方法吗?或者你只是接受 journalctl 记录失败?或者你只是忽略所有非零退出代码 ExecStart=-java -jar Darts-Backend-assembly-0.1.0.jar?

systemd 服务实际上有一个选项可以将 non-zero 退出状态处理为成功。

[Service]
SuccessExitStatus=143

考虑一下,正如预期的那样,这不会改变 0 仍然是成功退出状态的事实。

systemd manual 中的更多信息。