代替开发时nohup java -jar myapp.jar 生产环境做法

发布时间:2026/7/29 11:43:02

代替开发时nohup java -jar myapp.jar  生产环境做法 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] DescriptionMy Spring Boot Application Aftersyslog.target network.target [Service] # 指定运行用户实现权限隔离 Userapp_user Groupapp_user # 核心启动命令建议指定完整 Java 路径和 JVM 参数 ExecStart/usr/bin/java -Xms512m -Xmx512m -XX:UseG1GC \ -jar /opt/myapp/app.jar \ --spring.profiles.activeprod # Spring Boot 优雅关闭143 代表 SIGTERM 信号正常退出 SuccessExitStatus143 # 崩溃自动重启 Restartalways RestartSec10 # 日志由 systemd 接管用 journalctl 查看 StandardOutputsyslog StandardErrorsyslog SyslogIdentifiermyapp [Install] WantedBymulti-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-lingerusername

相关新闻