第一次重新加载后:"nginx: [error] open() "/var/run/nginx.pid“失败(2:没有那个文件或目录)”

After the first reload: "nginx: [error] open() "/var/run/nginx.pid" failed (2: No such file or directory)"

使用我应用的 Salt 声明安装 运行 NGINX (1.14.0-0ubuntu1.7) 作为服务。服务的状态是活动的,但 systemctl reload nginx 一直失败,因此无法应用更新的配置。

完整日志:

systemd[1]: nginx.service: Can't open PID file /run/nginx.pid (yet?) after reload: No such file or directory
systemd[1]: Reloaded A high performance web server and a reverse proxy server.
systemd[1]: Reloading A high performance web server and a reverse proxy server.
nginx[18095]: nginx: [error] open() "/var/run/nginx.pid" failed (2: No such file or directory)
systemd[1]: nginx.service: Control process exited, code=exited status=1
systemd[1]: Reload failed for A high performance web server and a reverse proxy server.
systemd[1]: Reloading A high performance web server and a reverse proxy server.
nginx[1209]: nginx: [error] invalid PID number "" in "/var/run/nginx.pid"
systemd[1]: nginx.service: Control process exited, code=exited status=1
systemd[1]: Reload failed for A high performance web server and a reverse proxy server.

我认为在这种情况下的主要问题是 NGINX 服务在需要的 /etc/nginx/nginx.conf 被放置之前就已经启动了。在我看来,此命令导致 NGINX 搜索 nginx.conf 中定义的 PID 文件,但 PID 位置策略在启动期间不同,因此 PID 文件未在重新加载服务预期的位置定义。

然而,service.running 观看 file: /etc/nginx/nginx.conf。但这还不够,因为服务的第一次启动发生在默认 nginx.conf.

包安装之后

综上所述,解决方案是在包安装之前放置 /etc/nginx/nginx.conf 和不同的 pid 指令(如果安装包确保所有 NGINX 进程都被杀死,用需要 nginx.conf 或 [小心,备份配置...] 完全删除禁用服务和删除配置的包)。在 Salt Stack 的情况下,将 - require_in: pkg: nginxnginx 这里是包安装状态的名称)放入管理 /etc/nginx/nginx.conf.

的状态