源码编译安装的Nginx默认不自带systemd服务文件,必须手动创建/etc/systemd/system/nginx.service并配置正确路径、PIDFile和ExecStart等参数,再执行daemon-reload、enable、start才能用systemctl管理。

源码编译安装的 Nginx 默认不自带 systemd 服务文件,必须手动创建并启用,才能用 systemctl start nginx 启动、设置开机自启,或通过 systemctl reload nginx 重载配置。
创建 nginx.service 文件
在 /etc/systemd/system/ 下新建服务定义文件:
填入以下内容(注意路径与你的实际安装路径一致,例如 /usr/local/nginx):
[Unit] Description=Nginx Web Server After=network.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=/usr/local/nginx/sbin/nginx -s reload ExecStop=/usr/local/nginx/sbin/nginx -s stop Restart=on-failure RestartSec=3 [Install] WantedBy=multi-user.target
关键点说明:
-
Type=forking:Nginx 启动后会 fork 子进程,主进程退出,systemd 需按此类型识别 PID -
PIDFile必须指向nginx.pid实际位置,该文件由 Nginx 自动写入(确保logs/目录可写) -
ExecStartPre在启动前校验配置语法,避免服务因配置错误无法启动 - 所有路径(
sbin/nginx、conf/nginx.conf、logs/)需与你./configure --prefix=...指定的一致
重载 systemd 并启用服务
保存后执行:
验证是否运行正常:
sudo systemctl status nginx ps aux | grep nginx若提示 “Failed to start nginx.service”,常见原因有:
- 配置文件语法错误 → 先运行
/usr/local/nginx/sbin/nginx -t - PIDFile 路径不存在或权限不足 → 检查
/usr/local/nginx/logs/所属用户是否为运行 Nginx 的用户(如nginx) - SELinux 或防火墙拦截 → 临时禁用测试:
sudo setenforce 0、sudo systemctl stop firewalld
补充:让 nginx 命令全局可用(可选)
为方便日常操作,可添加软链接或配置环境变量:
sudo ln -sf /usr/local/nginx/sbin/nginx /usr/local/bin/nginx之后就能直接运行 nginx -t、nginx -s reload 等命令,无需切换目录。
验证与后续维护
服务启用后,可通过以下方式确认功能完整:
- 重启系统后自动拉起:
sudo reboot→ 登录后检查systemctl is-active nginx - 修改配置后热重载:
sudo systemctl reload nginx(等价于nginx -s reload) - 查看日志:
sudo journalctl -u nginx -f或直接读/usr/local/nginx/logs/error.log


















