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环境下部署后端服务的标准方案,配置步骤如下:
- 新建服务配置文件,执行命令:
sudo vim /etc/systemd/system/springboot-api.service - 写入以下配置内容,注意替换占位符为你实际的路径和参数:
[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 - 执行以下命令加载配置并启动服务:
- 重载systemd配置:
sudo systemctl daemon-reload - 启动服务:
sudo systemctl start springboot-api.service - 设置开机自启:
sudo systemctl enable springboot-api.service
- 重载systemd配置:
- 常用运维命令:
- 查看服务运行状态:
sudo systemctl status springboot-api.service - 实时查看服务日志:
sudo journalctl -u springboot-api.service -f - 重启服务:
sudo systemctl restart springboot-api.service
- 查看服务运行状态:
配置完成后,无论SSH会话是否退出、服务器是否重启,服务都会持续正常运行。
内容的提问来源于stack exchange,提问作者Victor Morales
相关产品推荐
相关产品推荐

