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

y0u0uwnf  于 2022-11-07  发布在  其他
关注(0)|答案(1)|浏览(123)

我正在运行一个用scala编写的应用程序(运行在jvm上),作为一个配置了ExecStart=java -jar Darts-Backend-assembly-0.1.0.jar的systemd服务。
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'.

据我所知,当Scala(Java)应用程序接收到SIGTERM信号时,没有办法配置它的退出代码。似乎也没有办法配置systemd,使其接受143作为进程的成功终止,并仍然将所有其他非零退出代码解释为失败。
目标是将SIGTERM终止解释为成功终止,而将其他终止(例如,来自实际失败的终止,如未处理的异常)仍记录为失败。
有没有人知道解决这个问题的方法?或者你只是接受journalctl记录失败?或者你只是忽略所有ExecStart=-java -jar Darts-Backend-assembly-0.1.0.jar的非零退出代码?

x0fgdtte

x0fgdtte1#

systemd服务实际上具有将非零退出状态处理为成功的选项。

[Service]
SuccessExitStatus=143

考虑到这一点,正如预期的那样,这并没有改变0仍然是成功退出状态的事实。
更多信息请参阅systemd手册。

相关问题