systemd 服务在没有任何明显原因的情况下重新启动

systemd 服务在没有任何明显原因的情况下重新启动

我有两个 Spring 应用程序,运行得很好,没有什么特别的事情发生,然后突然应用程序重新启动; Journalctl 显示这些行:

Jan 15 04:43:11 nyota.softworks.nl systemd[1]: Stopping calendaraggregator.service...
Jan 15 04:43:11 nyota.softworks.nl systemd[1]: calendaraggregator.service: Deactivated successfully.
Jan 15 04:43:11 nyota.softworks.nl systemd[1]: Stopped calendaraggregator.service.
Jan 15 04:43:11 nyota.softworks.nl systemd[1]: calendaraggregator.service: Consumed 3min 313ms CPU time.
Jan 15 04:43:11 nyota.softworks.nl systemd[1]: Started calendaraggregator.service.
Jan 15 10:41:43 nyota.softworks.nl systemd[1]: Stopping calendaraggregator.service...
Jan 15 10:41:43 nyota.softworks.nl systemd[1]: calendaraggregator.service: Deactivated successfully.
Jan 15 10:41:43 nyota.softworks.nl systemd[1]: Stopped calendaraggregator.service.
Jan 15 10:41:43 nyota.softworks.nl systemd[1]: calendaraggregator.service: Consumed 1min 48.505s CPU time.
Jan 15 10:41:43 nyota.softworks.nl systemd[1]: Started calendaraggregator.service.
Jan 15 18:17:17 nyota.softworks.nl systemd[1]: Stopping calendaraggregator.service...
Jan 15 18:17:17 nyota.softworks.nl systemd[1]: calendaraggregator.service: Deactivated successfully.
Jan 15 18:17:17 nyota.softworks.nl systemd[1]: Stopped calendaraggregator.service.
Jan 15 18:17:17 nyota.softworks.nl systemd[1]: calendaraggregator.service: Consumed 2min 24.748s CPU time.
Jan 15 18:17:17 nyota.softworks.nl systemd[1]: Started calendaraggregator.service.

但是 systemctl 配置 AFAIK 不会重新启动,即使在失败后也不会(将其拿出来调试)。

[Service]
WorkingDirectory=/home/calendaraggregator/
User=calendaraggregator
Group=calendaraggregator
ExecStart=/bin/bash /home/calendaraggregator/run.sh

有没有办法看看是什么触发了关闭?

应用程序的日志没有多大用处,它只是说INFO org.springframework.core.log.CompositeLog [SpringApplicationShutdownHook] Stopping.没有任何原因/异常。另外,应用程序会在外部重新启动,因为主程序再次被调用(我记录了这一点)并且据我所知,我没有将 systemd 配置为重新启动。


更新2024-02-10

经过多次尝试,这似乎是一个复杂的问题。首先,SpringBoot 具有内部重启功能,可以通过执行器或通过开发人员工具。

https://javapointers.com/spring/spring-boot/how-to-restart-spring-boot-automatically-using-actuator/

执行器不会那么快地执行某些操作,但开发工具有一种方法可以将自己潜入生产 jar 中。例如,通过使用 Maven Shade 插件构建它。为了防止开发工具变得活跃,请确保在启动 java 时指定以下选项:

-Dspring.devtools.restart.enabled=false

但此后重启仍在发生。

完全删除 systemd 配置,创建新的启动 shell 脚本,并且仅记录原始启动脚本的调用后,重新启动问题就消失了。但我仍然可以看到原始的启动 shell 脚本被调用。

如此修补但未解决:什么仍在调用原始启动脚本?!

答案1

这不是正式的答案,而是一种解决方法。 systemd 服务在没有任何可能原因的情况下不断重新启动,但事实证明,如果我将该服务移至用户,它将不再重新启动。

https://wiki.archlinux.org/title/systemd/User#Example

相关内容