最稳妥、主流且推荐的方式是用systemd注册为系统服务,它原生支持开机自启、进程守护、日志管理与自动重启,无需额外软件,CentOS 7+/Ubuntu 16.04+均适用;应封装启动脚本而非直接在service中写java -jar命令,配合Type=simple、Restart=always等配置实现健壮运维。

最稳妥、主流且推荐的方式是用 systemd 注册为系统服务,它原生支持开机自启、进程守护、日志管理与自动重启,不需要额外装软件,CentOS 7+/Ubuntu 16.04+ 都适用。
准备启动脚本(建议封装)
不要直接在 service 文件里写 java -jar 命令。先写一个带健壮逻辑的启动脚本,比如 /opt/myapp/start.sh:
- 检查 jar 包是否存在
- 校验 Java 是否可用(避免因环境变量缺失失败)
- 检测端口是否被占用(防止启动冲突)
- 使用绝对路径调用 java(如
/usr/lib/jvm/java-17-openjdk-amd64/bin/java) - 指定 JVM 参数、配置文件、日志输出路径(如
--spring.profiles.active=prod) - 加执行权限:
chmod +x /opt/myapp/start.sh
编写 systemd 服务文件
新建文件:sudo vim /etc/systemd/system/myapp.service,内容示例:
[Unit] Description=My Spring Boot App After=network.target [Service] Type=simple User=appuser WorkingDirectory=/opt/myapp ExecStart=/opt/myapp/start.sh Restart=always RestartSec=5 StandardOutput=append:/var/log/myapp/out.log StandardError=append:/var/log/myapp/err.log Environment="JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64" [Install] WantedBy=multi-user.target
注意:Type=simple 更适合前台运行的 Java 进程;若用 nohup 启动并后台化,可改 Type=forking,但需配合 PIDFile= 和正确信号处理。
Linux 性能分析与调优专家,覆盖 CPU、内存、磁盘 I/O、网络、内核参数、编译优化、容器/K8s。适用场景:系统卡顿/高负载、内存不足/OOM/Swap 高、CPU 异常/iowait 高。
启用并验证开机自启
执行三步命令即可生效:
-
sudo systemctl daemon-reload(重载配置) -
sudo systemctl enable myapp.service(设为开机启动) -
sudo systemctl start myapp.service(立即启动,测试是否正常)
验证状态:systemctl status myapp;查日志:journalctl -u myapp -f;重启机器后确认服务是否自动拉起。
替代方案(不推荐用于生产)
如仅临时测试,可将启动命令追加到 /etc/rc.local(需确保该文件有执行权限且 systemd 已启用 rc-local 服务),但缺乏进程监控、日志隔离和错误恢复能力,容易失效。

















