systemctl管理Java进程无限重启问题
# 查看指定日期以来的相关报错日志
journalctl -u manage-service.service --since "2025-09-03 00:00:00" | grep "Main process exited" -C 5
AI相关回复片段
是的,systemd 会记录服务的状态变化和重启原因,你可以通过以下命令查看相关日志来定位触发重启的具体原因:
-
查看服务的详细日志(推荐):
journalctl -u support-service -f-u support-service:指定查看support-service服务的日志-f:实时跟踪最新日志(可省略,用于实时监控)
-
查看服务的重启历史和状态:
systemctl status support-service该命令会显示服务的当前状态、最近的重启时间、退出码等信息,例如:
● support-service.service - support-service Loaded: loaded (/etc/systemd/system/support-service.service; enabled; vendor preset: disabled) Active: active (running) since Wed 2025-09-03 10:00:00 CST; 5min ago Process: 12345 ExecStart=/usr/bin/java ... (code=exited, status=143) Main PID: 67890 (java) CGroup: /system.slice/support-service.service └─67890 /usr/bin/java -jar ...其中
code=exited, status=143表示上一次退出的状态码(143 通常对应 SIGTERM 信号)。 -
查看更早期的日志:
journalctl -u support-service --since "2025-09-03 09:00:00" --until "2025-09-03 10:00:00"通过时间范围筛选特定时段的日志。
关键日志信息解读:
- 如果日志中出现
Main process exited, code=exited, status=1/FAILURE,说明应用程序自身异常退出(非零状态码),触发了Restart=on-failure配置。 - 如果出现
Killed process 12345 (java) total-vm:2048M, ...,可能是因为内存超过MemoryLimit=1024M限制被系统杀死。 - 如果出现
Stopped support-service.后紧接着Started support-service.,说明服务被主动停止后重启(可能是手动操作或其他进程触发)。
结合应用程序自身的日志(通常在 /data/xxx/support-service 目录下),可以更全面地定位重启原因(例如 OOM 错误、未捕获的异常等)。