代替开发时nohup java -jar myapp.jar 生产环境做法
2026/7/29 11:42:45 网站建设 项目流程

nohup & 为什么不行?

nohup&只是把进程放到后台运行、忽略挂断信号而已,它根本不是一个进程管理方案。生产环境用这套,你会频繁踩到这些坑:

  • 进程管理混乱:想重启?先ps找 PID 再kill,手一抖可能误杀其他服务
  • 开机无法自启:服务器因故障重启,服务不会自动恢复,半夜被报警电话叫醒是常态
  • 权限失控:为了省事直接用 root 跑,安全风险极高
  • 日志管理混乱:日志文件无人轮转,磁盘被写满是迟早的事

方案一:Systemd(最推荐)

Systemd 是现代 Linux 发行版(CentOS 7+、Ubuntu 16.04+)的标准服务管理器。用它管理 Spring Boot 应用,无需安装任何额外软件,功能却比 nohup 强大得多。

第一步:创建专用账户(安全第一)

绝对不要用 root 用户运行业务代码:

# 创建一个没有登录权限的用户sudouseradd-r-s/bin/false app_user# 确保该用户对 JAR 包有读写权限sudochownapp_user:app_user /opt/myapp/app.jar

第二步:编写 Service 文件

/etc/systemd/system/myapp.service创建服务配置文件:

[Unit] Description=My Spring Boot Application After=syslog.target network.target [Service] # 指定运行用户,实现权限隔离 User=app_user Group=app_user # 核心启动命令(建议指定完整 Java 路径和 JVM 参数) ExecStart=/usr/bin/java -Xms512m -Xmx512m -XX:+UseG1GC \ -jar /opt/myapp/app.jar \ --spring.profiles.active=prod # Spring Boot 优雅关闭:143 代表 SIGTERM 信号正常退出 SuccessExitStatus=143 # 崩溃自动重启 Restart=always RestartSec=10 # 日志由 systemd 接管,用 journalctl 查看 StandardOutput=syslog StandardError=syslog SyslogIdentifier=myapp [Install] WantedBy=multi-user.target

第三步:激活与管理

# 重载配置sudosystemctl daemon-reload# 设置开机自启(从此告别重启焦虑)sudosystemctlenablemyapp# 启动服务sudosystemctl start myapp# 查看状态sudosystemctl status myapp# 查看日志sudojournalctl-umyapp-f

无 Root 权限怎么办?

很多银行、国企的内网环境只有普通账号,没有 sudo 权限。这时可以用 systemd 的用户模式(User Mode):

# 创建用户级服务文件mkdir-p~/.config/systemd/user/# 把 .service 文件放到这个目录,内容同上但去掉 User/Group 字段# 启用并启动systemctl--userenablemyapp systemctl--userstart myapp# 关键:开启 linger 让用户退出后服务继续运行# 这需要管理员执行一次:sudologinctl enable-linger<username>

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询