如何在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):
找到对应PID后执行ps aux | grep myapplication.jarkill <PID>即可终止进程。
方法二:用screen/tmux创建持久会话
适合需要后续重新连接到应用控制台的场景,比如调试阶段:
以screen为例:
- 先安装screen(服务器未预装时):
- CentOS/RHEL:
yum install -y screen - Debian/Ubuntu:
apt install -y screen
- CentOS/RHEL:
- 创建新会话:
screen -S spring_app - 在会话内正常启动应用:
java -jar myapplication.jar - 按
Ctrl+A再按D,将会话后台挂起,此时关闭Putty不影响进程 - 下次登录服务器后,重新连接会话:
screen -r spring_app - 彻底关闭会话,回到会话内执行
exit即可。
方法三:配置systemd系统服务(生产环境推荐)
把应用做成系统服务,支持开机自启、自动重启,是生产环境的标准做法:
- 在
/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 - 重新加载systemd配置:
systemctl daemon-reload - 启动应用服务:
systemctl start myapp - 设置开机自启:
systemctl enable myapp - 服务常用操作:
- 查看状态:
systemctl status myapp - 查看实时日志:
journalctl -u myapp -f - 停止服务:
systemctl stop myapp
- 查看状态:
额外提醒
- 生产环境尽量不要用root用户运行应用,创建专门的普通用户(比如
appuser),修改服务文件里的User字段,并给Jar文件和相关目录设置正确权限。 - 可自定义日志输出路径,比如在启动命令后追加
>> /var/log/myapp.log 2>&1,将日志写入指定位置,方便管理。
内容的提问来源于stack exchange,提问作者Sai
相关产品推荐
相关产品推荐

