You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

AWS EC2 Ubuntu实例退出SSH会话后Spring Boot应用停止如何解决

SSH退出后Spring Boot服务停止的解决方案

根本原因

你直接在交互式SSH会话中执行java -jar app.jar时,该Java进程属于当前SSH会话的子进程,会话退出时系统会发送SIGHUP信号终止会话关联的所有进程,你提供的日志中session-26.scope: Succeeded记录的就是会话关联进程被全部清理的事件。

可用解决方案

方案1:临时后台运行(适合测试调试场景)

如果只是临时测试不需要长期运行,可以用以下两种快速方案:

  • nohup后台启动:
    执行命令nohup java -jar app.jar > app.log 2>&1 &即可,nohup会忽略SIGHUP信号,&让进程后台运行,服务的输出会写入当前目录下的app.log文件,退出SSH后进程不会被终止。
  • screen终端复用:
    先执行sudo apt install screen安装工具,再执行screen -S app创建专属会话,在会话内正常执行java -jar app.jar启动服务,按下Ctrl+A+D即可退出会话而不终止进程,后续需要查看服务输出可以执行screen -r app回到会话。

方案2:配置systemd系统服务(生产环境推荐)

该方案支持服务崩溃自动重启、开机自启,是Linux环境下部署后端服务的标准方案,配置步骤如下:

  1. 新建服务配置文件,执行命令:
    sudo vim /etc/systemd/system/springboot-api.service
  2. 写入以下配置内容,注意替换占位符为你实际的路径和参数:
    [Unit]
    Description=Spring Boot API Service
    After=network.target
    
    [Service]
    User=ubuntu
    WorkingDirectory=/opt/springboot-app  # 替换为你的jar包所在的实际目录
    ExecStart=/usr/bin/java -Xmx512m -jar app.jar  # 可按需添加JVM启动参数
    Restart=always
    RestartSec=5
    
    [Install]
    WantedBy=multi-user.target
    
  3. 执行以下命令加载配置并启动服务:
    • 重载systemd配置:sudo systemctl daemon-reload
    • 启动服务:sudo systemctl start springboot-api.service
    • 设置开机自启:sudo systemctl enable springboot-api.service
  4. 常用运维命令:
    • 查看服务运行状态:sudo systemctl status springboot-api.service
    • 实时查看服务日志:sudo journalctl -u springboot-api.service -f
    • 重启服务:sudo systemctl restart springboot-api.service

配置完成后,无论SSH会话是否退出、服务器是否重启,服务都会持续正常运行。


内容的提问来源于stack exchange,提问作者Victor Morales

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 08:15:03