手动编译安装nginx后默认无systemd服务文件,需创建/etc/systemd/system/nginx.service,配置execstart等参数并执行daemon-reload、enable、start实现开机自启与systemctl管理。

手动编译安装 Nginx 后,默认不会生成 systemd 服务文件,需自行创建并启用,才能实现开机自启和 systemctl 管理。
确认 Nginx 安装路径与用户
编译安装的 Nginx 通常位于 /usr/local/nginx(可执行文件为 /usr/local/nginx/sbin/nginx),配置文件在 /usr/local/nginx/conf/nginx.conf。建议用非 root 用户(如 www 或 nginx)运行 worker 进程,主进程仍需 root 权限绑定 80/443 端口。
检查实际路径:
which nginx # 可能为空,因未加入 PATH<br>/usr/local/nginx/sbin/nginx -t # 验证配置与路径<br>/usr/local/nginx/sbin/nginx -V # 查看编译参数,确认 user 指令
创建 systemd 服务单元文件
新建服务文件:/etc/systemd/system/nginx.service,内容如下(请按实际路径和用户调整):
[Unit]<br>Description=The NGINX HTTP and reverse proxy server<br>After=network.target remote-fs.target nss-lookup.target<br><br>[Service]<br>Type=forking<br>PIDFile=/usr/local/nginx/logs/nginx.pid<br>ExecStartPre=/usr/local/nginx/sbin/nginx -t<br>ExecStart=/usr/local/nginx/sbin/nginx<br>ExecReload=/bin/kill -s HUP $MAINPID<br>ExecStop=/bin/kill -s TERM $MAINPID<br>Restart=on-failure<br>RestartSec=3<br>User=root<br>Group=root<br>LimitNOFILE=65535<br><br>[Install]<br>WantedBy=multi-user.target
说明要点:
-
Type=forking:适配 Nginx 主进程 fork 子进程的模式;若使用
daemon off;(不推荐生产环境),可改用Type=simple -
PIDFile 必须与
nginx.conf中pid指令路径一致(默认logs/nginx.pid) -
User/Group:若配置中指定了
user www;,此处可设为User=www,但ExecStart仍需 root 启动主进程 - ExecStartPre 确保配置语法正确,避免启动失败
启用并验证服务
执行以下命令加载并启用服务:
sudo systemctl daemon-reload<br>sudo systemctl enable nginx<br>sudo systemctl start nginx<br>sudo systemctl status nginx # 查看是否 active (running)
常见问题排查:
- 报错
Failed to start nginx.service: Unit nginx.service not found:检查文件名是否为nginx.service、路径是否为/etc/systemd/system/、有无拼写错误 - 启动后状态显示
failed:运行sudo journalctl -u nginx -n 50 -e查看最近日志,重点看ExecStartPre是否通过、PID 文件路径是否存在、端口是否被占用 - 重启后未自启:确认
enable成功(输出含Created symlink...),且系统使用 systemd(ps -p 1应显示 systemd)
补充:支持 reload 和 graceful 重载
systemd 已通过 ExecReload 支持平滑重载配置:
sudo systemctl reload nginx # 等价于 nginx -s reload<br>sudo nginx -t && sudo systemctl restart nginx # 修改配置后安全重启
如需指定配置文件路径(例如使用自定义 conf),可在 ExecStart 后加 -c /path/to/nginx.conf,同时同步更新 ExecStartPre。











