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

如何在Unix服务器部署SpringBoot Jar/War并避免Putty关闭后停止

解决Spring Boot应用关闭Putty后停止运行的问题

直接用java -jar启动的进程属于当前SSH会话,关闭Putty时会话结束,进程会被系统终止,下面给你几种靠谱的解决办法:

方法一:用nohup让进程后台持久运行

这是最轻量化的快速方案,适合临时测试或者小项目:

  • 执行启动命令时加上nohup和后台运行符号&:
    nohup java -jar myapplication.jar &
    
  • 程序输出会默认写入当前目录的nohup.out文件,查看实时日志可执行:
    tail -f nohup.out
    
  • 需要停止应用时,先查找进程ID(PID):
    ps aux | grep myapplication.jar
    
    找到对应PID后执行kill <PID>即可终止进程。

方法二:用screen/tmux创建持久会话

适合需要后续重新连接到应用控制台的场景,比如调试阶段:

以screen为例:

  1. 先安装screen(服务器未预装时):
    • CentOS/RHEL:yum install -y screen
    • Debian/Ubuntu:apt install -y screen
  2. 创建新会话:
    screen -S spring_app
    
  3. 在会话内正常启动应用:
    java -jar myapplication.jar
    
  4. 按Ctrl+A再按D,将会话后台挂起,此时关闭Putty不影响进程
  5. 下次登录服务器后,重新连接会话:
    screen -r spring_app
    
  6. 彻底关闭会话,回到会话内执行exit即可。

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

把应用做成系统服务,支持开机自启、自动重启,是生产环境的标准做法:

  1. 在/etc/systemd/system/目录下创建服务文件,比如myapp.service:
    [Unit]
    Description=我的SpringBoot应用
    After=network.target
    
    [Service]
    Type=simple
    # 建议创建专门的普通用户运行应用,不要用root,此处暂用root示例
    User=root
    # 替换为你的Jar文件实际路径
    ExecStart=/usr/bin/java -jar /opt/myproject/myapplication.jar
    # 进程意外退出时自动重启
    Restart=always
    RestartSec=3
    
    [Install]
    WantedBy=multi-user.target
    
  2. 重新加载systemd配置:
    systemctl daemon-reload
    
  3. 启动应用服务:
    systemctl start myapp
    
  4. 设置开机自启:
    systemctl enable myapp
    
  5. 服务常用操作:
    • 查看状态:systemctl status myapp
    • 查看实时日志:journalctl -u myapp -f
    • 停止服务:systemctl stop myapp

额外提醒

  • 生产环境尽量不要用root用户运行应用,创建专门的普通用户(比如appuser),修改服务文件里的User字段,并给Jar文件和相关目录设置正确权限。
  • 可自定义日志输出路径,比如在启动命令后追加>> /var/log/myapp.log 2>&1,将日志写入指定位置,方便管理。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 23:10:30