跳到主要内容

systemctl管理Java进程无限重启问题

# 查看指定日期以来的相关报错日志
journalctl -u manage-service.service --since "2025-09-03 00:00:00" | grep "Main process exited" -C 5

AI相关回复片段

是的,systemd 会记录服务的状态变化和重启原因,你可以通过以下命令查看相关日志来定位触发重启的具体原因:

  1. 查看服务的详细日志(推荐)

    journalctl -u support-service -f
    
    • -u support-service:指定查看 support-service 服务的日志
    • -f:实时跟踪最新日志(可省略,用于实时监控)
  2. 查看服务的重启历史和状态

    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 信号)。

  3. 查看更早期的日志

    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 错误、未捕获的异常等)。