如何让Oracle Cloud上的Spring Boot服务在关闭Windows PowerShell后持续运行
让Spring Boot服务在关闭PowerShell后持续运行的方法
问题出在你通过PowerShell远程启动的Spring Boot进程属于当前会话的前台进程,关闭PowerShell时会话终止,进程也会被杀死。以下是几种实用的解决办法:
方法1:使用nohup后台启动
直接在启动命令前加上nohup,并将输出重定向到日志文件,让进程脱离当前会话:
nohup java -jar your-spring-boot-app.jar > app.log 2>&1 &
nohup:让进程忽略挂起信号,会话结束后仍能继续运行> app.log 2>&1:将标准输出和错误输出都写入app.log,方便后续排查问题&:让进程在后台运行
关闭PowerShell后,服务会继续在OCI实例后台运行。想要查看日志可以用tail -f app.log命令实时追踪。
方法2:使用screen创建持久会话
如果需要后续重新连接到进程控制台,可使用screen:
- 先安装screen(未安装的话):
sudo dnf install screen
- 创建新的screen会话:
screen -S spring-session
- 在该会话内启动Spring Boot服务:
java -jar your-spring-boot-app.jar
- 按下
Ctrl+A再按D,脱离当前会话,此时关闭PowerShell不会影响进程 - 后续重新连接会话可使用:
screen -r spring-session
方法3:配置systemd服务(推荐,最稳定)
将Spring Boot服务注册为systemd系统服务,可实现开机自启,且完全不受会话影响,是生产环境的首选方案:
- 创建systemd服务配置文件,比如
/etc/systemd/system/spring-app.service:
sudo nano /etc/systemd/system/spring-app.service
- 写入以下内容(根据实际路径修改):
[Unit] Description=My Spring Boot Application After=network.target [Service] User=your-username WorkingDirectory=/path/to/your/app/directory ExecStart=/usr/bin/java -jar your-spring-boot-app.jar Restart=always RestartSec=10 [Install] WantedBy=multi-user.target
User:设置运行服务的用户(即你登录OCI实例的用户名)WorkingDirectory:Spring Boot jar文件所在的目录ExecStart:完整的启动命令路径(可用which java查看java的实际路径)Restart=always:服务意外停止时自动重启
- 保存并退出nano(按
Ctrl+O回车,再按Ctrl+X) - 重新加载systemd配置:
sudo systemctl daemon-reload
- 启动服务:
sudo systemctl start spring-app
- 设置开机自启:
sudo systemctl enable spring-app
- 查看服务状态:
sudo systemctl status spring-app
这种方式下,即使OCI实例重启,服务也会自动启动,完全不受PowerShell会话的影响。
内容的提问来源于stack exchange,提问作者Luthfi Fitra Musyaffa
相关产品推荐
相关产品推荐

