通过 SystemD 运行时 nginx 不会出现

通过 SystemD 运行时 nginx 不会出现

我使用以下命令安装了主线 nginx 1.13.9提供的转速在 CentOS 7.4 上。我不得不使用这个 rpm,因为yum localinstall公司治理迫使我这样做。

我的问题是systemctl start nginx总是会产生这样的结果:

Job for nginx.service failed because the control process exited with error code. See "systemctl status nginx.service" and "journalctl -xe" for details.

Journalctl 告诉我:

Mar 07 08:57:05 myhost nginx[19466]: nginx: [emerg] open() "/var/opt/nginx/config/nginx.conf" failed (13: Permission denied)

(你在这里看到的是另一个公司的事情:我不能把conf文件放在etc下,我必须将它们保存在一个不需要root权限来更改它们的目录中)

这些是为 nginx.conf 设置的权限:

-rw-r--r--. 1 nginx nginx 241 Mar 7 09:17 nginx.conf

我将 nginx.conf 减少到(我猜)绝对最小值,甚至尝试将日志文件、pid 等文件放入肯定授予权限的目录中。错误日志绝对不包含任何内容。

这是我减少的 nginx.conf:

user nginx nginx;
pid /tmp/nginx.pid;
error_log /tmp/error.log debug;

events {
}

http {
  default_type application/octet-stream;
  charset      UTF-8;

  server {
    listen          8080;
    location / {
      root /tmp/;
    }
  }
}

这是我稍微修改过的nginx.service定义:

[Unit]
Description=nginx - high performance web server
Documentation=http://nginx.org/en/docs/
After=network-online.target remote-fs.target nss-lookup.target
Wants=network-online.target

[Service]
Type=forking
PIDFile=/var/run/nginx.pid
ExecStart=/usr/sbin/nginx -c /var/opt/nginx/config/nginx.conf -g "error_log  /tmp/error.log debug;"
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s TERM $MAINPID

[Install]
WantedBy=multi-user.target

(你可以看到我试图强制一个 error_log 以防 nginx 在读取 nginx.conf 之前失败)

当我sudo -u nginx /usr/sbin/nginx -c /var/opt/nginx/config/nginx.conf -g "error_log /tmp/error.log debug;"这样做时效果很好。尽管有一个简短的警告,但该过程启动正常:

nginx: [warn] the "user" directive makes sense only if the master process runs with super-user privileges, ignored in /var/opt/nginx/config/nginx.conf:1

我确信这一定是一些愚蠢的错误,但我不知道是哪个。

答案1

这个问题是由我犯的两个错误引起的:

  • 目录权限不正确
  • 缺少组成员资格

其中一个目录缺少x,因此该进程无法遍历该路径。我不得不chmod g+X这样做。除此之外,我还必须将 nginx 的技术用户(在我的场景中不是默认的 nginx)添加到 nginx 组。

相关内容