为 Spring Boot 项目和 Nginx 配置开机自启
- 工作小总结&小工具类
- 时间:2025-09-11 18:46
- 47人已阅读
🔔🔔好消息!好消息!🔔🔔
有需要的朋友👉:微信号
为 Spring Boot 项目和 Nginx 配置开机自启,使用 systemd
是目前 Linux 系统中推荐和服务化管理的方式。我会为你提供详细的配置步骤和验证方法。
下面的表格汇总了这两个服务的主要配置要点:
特性 | Spring Boot 服务 (cd-device-distance.service) | Nginx 服务 (nginx.service) |
---|---|---|
服务描述 | CD Device Distance Spring Boot Application | The NGINX HTTP and reverse proxy server |
依赖关系 | network.target | network.target 或 syslog.target , network.target , remote-fs.target , nss-lookup.target |
服务类型 | simple | forking |
关键配置 | WorkingDirectory , ExecStart | PIDFile , ExecStartPre , ExecStart |
用户权限 | 可选指定用户和组 | 通常以 root 用户运行 |
安装目标 | multi-user.target | multi-user.target |
📁 创建 Spring Boot 的 systemd 服务
创建服务文件:使用文本编辑器(如
vim
或nano
)在/etc/systemd/system/
目录下创建一个名为cd-device-distance.service
的文件。sudo vim /etc/systemd/system/cd-device-distance.service
编写服务配置:将以下内容写入文件。你需要重点关注
WorkingDirectory
和ExecStart
这两个参数,确保它们指向你实际的目录和启动命令。[Unit] Description=CD Device Distance Spring Boot Application After=network.target [Service] # 如果希望以特定用户运行(推荐),可取消以下两行的注释并替换为你的用户名和组 # User=your_username # Group=your_groupname Type=simple WorkingDirectory=/htdocs/service/cd-devcie-distance ExecStart=/usr/bin/java -jar /htdocs/service/cd-devcie-distance/cd-devcie-distance.jar SuccessExitStatus=143 TimeoutStopSec=10 Restart=on-failure RestartSec=5 [Install] WantedBy=multi-user.target
WorkingDirectory
: 设置工作目录,这对于应用读取相对路径下的配置文件(如application.properties
)或写日志文件很重要。ExecStart
: 这里直接使用java
的绝对路径(通常可通过which java
确认)更可靠。你原有的nohup
和输出重定向对于systemd
是不需要的,因为systemd
会自行管理日志(可用journalctl
查看)。User
和Group
: 建议出于安全考虑,创建一个专用系统用户和组来运行你的 Java 应用,而不是使用root
。Restart
: 配置为on-failure
意味着当进程异常退出时(退出状态码非 0),systemd
会自动尝试重启应用。关键参数说明:
保存并退出编辑器。
📁 创建 Nginx 的 systemd 服务
Nginx 在通过包管理器安装时,通常会自动创建 systemd 服务文件。如果你从源码编译安装,或者想确认配置,可以检查或创建它。
检查服务是否已存在:
ls /lib/systemd/system/nginx.service /etc/systemd/system/nginx.service 2>/dev/null || echo "Nginx service file not found, will create one."
如果输出提示文件不存在,或者你想使用自定义配置,可以创建它。
创建或编辑服务文件:
sudo vim /etc/systemd/system/nginx.service
编写服务配置:将以下内容写入文件。
[Unit] Description=The NGINX HTTP and reverse proxy server After=network.target [Service] Type=forking PIDFile=/run/nginx.pid ExecStartPre=/usr/local/nginx/sbin/nginx -t ExecStart=/usr/local/nginx/sbin/nginx ExecReload=/usr/local/nginx/sbin/nginx -s reload ExecStop=/usr/local/nginx/sbin/nginx -s stop PrivateTmp=true [Install] WantedBy=multi-user.target
Type=forking
: 适用于像 Nginx 这样会自行创建守护进程(daemonize)的应用程序。PIDFile
: 指明 Nginx 主进程 PID 文件的路径。重要:这个路径必须与 Nginx 配置文件 (nginx.conf
) 中pid
指令设置的路径一致,否则systemd
可能无法正确管理服务。ExecStartPre
: 在启动主服务之前执行的命令,nginx -t
用于测试配置文件语法是否正确,提前发现问题。ExecReload
: 定义了当执行systemctl reload nginx
时发出的命令,优雅地重新加载配置。关键参数说明:
保存并退出编辑器。
🔧 启用并启动服务
配置好服务文件后,需要让 systemd
识别并设置它们开机自启。
重新加载 systemd 配置:每当新增或修改了服务文件后,都需要执行此命令。
sudo systemctl daemon-reload
启用开机自动启动:
sudo systemctl enable cd-device-distance.service sudo systemctl enable nginx.service
这会在
/etc/systemd/system/multi-user.target.wants/
目录下创建相应的符号链接。立即启动服务:
sudo systemctl start cd-device-distance.service sudo systemctl start nginx.service
✅ 验证服务状态和自启生效
确保服务已正确运行并配置为开机启动。
检查服务当前状态:
sudo systemctl status cd-device-distance.service sudo systemctl status nginx.service
期望的输出:状态 (
Active
) 应显示为active (running)
,并且日志中不应有错误信息。 如果状态显示为inactive
或failed
,需要根据日志排查问题。确认是否启用开机自启:
sudo systemctl is-enabled cd-device-distance.service sudo systemctl is-enabled nginx.service
期望的输出:两条命令都应输出
enabled
。验证 Nginx 是否正在监听指定端口(通常是 80 或 443):
sudo netstat -tuln | grep :80 # 或者使用 ss 命令 sudo ss -tuln | grep :80
期望的输出:能看到
nginx
进程正在监听相关端口。最终验证:重启服务器
这是最彻底的验证方式。重启后,再次使用systemctl status
命令检查两个服务是否都已自动运行。sudo reboot
🔍 补充:验证 Nginx 的 systemd 服务文件是否存在
如果你不确定 Nginx 是否已经存在 systemd 服务文件,或者想知道它在哪里,可以通过以下命令查找:
# 在标准 systemd 搜索路径中查找 nginx.service 文件 sudo find /lib/systemd/system /etc/systemd/system -name "nginx.service" 2>/dev/null # 如果找到,查看其内容 sudo cat /path/to/found/nginx.service
如果系统已存在服务文件,建议优先使用已有的文件,除非你需要自定义修改。
⚠️ 注意
Java路径:确保
ExecStart
中的 Java 路径是正确的。可以使用which java
命令查看。配置文件路径:对于 Nginx,确保
PIDFile
的路径与 Nginx 自身配置文件中pid
指令定义的路径完全一致,否则会导致systemd
管理异常。日志查看:使用
journalctl -u cd-device-distance.service -u nginx.service -b
来查看本次启动后这两个服务的日志,对于调试非常有用。用户权限:如果为 Spring Boot 服务指定了非 root 用户,请确保该用户对相关目录和文件有足够的读写执行权限。
按照以上步骤操作,你的 Spring Boot 应用和 Nginx 就应该能够通过 systemd
实现开机自启了。
上一篇: Socket、WebSocket 和 Socket.IO 核心对比
下一篇: 谷歌机器学习