为源码编译安装的nginx配置systemd服务,核心是创建严格匹配实际路径的/etc/systemd/system/nginx.service文件:需正确设置pidfile、execstartpre、execstart等指令,并指定-c参数加载配置;启用前须执行systemctl daemon-reload、stop旧进程、再start并enable服务。

为源码编译安装的 Nginx 配置 systemd 服务,核心是创建一个符合规范的 /etc/systemd/system/nginx.service 文件,并确保路径、用户、PID 文件和命令都与实际安装情况严格一致。系统不会自动识别源码安装的程序,必须手动注册。
确认关键路径和运行参数
先明确你源码安装的实际配置,这是写 service 文件的前提:
-
可执行文件路径:通常是
/usr/local/nginx/sbin/nginx(configure 时用--prefix=/usr/local/nginx的默认结果) -
配置文件路径:默认为
/usr/local/nginx/conf/nginx.conf,若自定义过需对应填写 -
PID 文件路径:在 nginx.conf 的
pid指令中指定,常见为/usr/local/nginx/logs/nginx.pid -
运行用户:建议用非 root 用户跑 worker 进程(如
nginx或www-data),主进程仍需 root 权限绑定 80/443 端口
编写标准 nginx.service 文件
用 root 权限创建并编辑:
sudo vim /etc/systemd/system/nginx.service
内容示例如下(请按你的真实路径替换):
yuanfang-skills 的共享设计系统,提供 token CSS 变量、12+ 主题以及可复用的布局类型 HTML 块,供 yuanfang-html-image(以及 fu...)使用。
[Unit] Description=The NGINX HTTP and reverse proxy server After=network.target remote-fs.target nss-lookup.target [Service] Type=forking PIDFile=/usr/local/nginx/logs/nginx.pid ExecStartPre=/usr/local/nginx/sbin/nginx -t -c /usr/local/nginx/conf/nginx.conf ExecStart=/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf ExecReload=/bin/kill -s HUP $MAINPID ExecStop=/bin/kill -s QUIT $MAINPID PrivateTmp=true Restart=on-failure RestartSec=5 [Install] WantedBy=multi-user.target
说明:
-
Type=forking:适用于传统 fork 出子进程的守护进程,Nginx 默认行为匹配此类型 -
ExecStartPre确保配置语法正确再启动,避免因配置错误导致服务失败 -
Restart=on-failure让 systemd 在崩溃后自动拉起,提升稳定性 - 不要遗漏
RestartSec,防止频繁崩溃重试
启用并验证服务
保存后依次执行:
- sudo systemctl daemon-reload(重新加载 unit 定义)
- sudo systemctl start nginx(启动服务)
- sudo systemctl enable nginx(设置开机自启)
- sudo systemctl status nginx(检查是否 active (running),并确认 PID 路径和日志无报错)
如果提示 “Address already in use”,说明旧进程还在运行,先用 /usr/local/nginx/sbin/nginx -s stop 彻底停止,再启动 systemd 服务。
常见适配要点
不同环境可能需要微调:
- 若使用
user nginx;在 nginx.conf 中,systemd 不需额外设User=,但确保该系统用户存在(useradd -r -s /sbin/nologin nginx) - RHEL/CentOS 8+ 或较新发行版建议把 service 文件放在
/usr/lib/systemd/system/,但/etc/systemd/system/优先级更高,推荐放这里 - Debian/Ubuntu 上若已装过包管理版 nginx,请先
apt remove nginx*并清理残留(尤其是/etc/nginx和/var/run/nginx.pid),避免端口或 PID 冲突










