nginx não aparece quando executado via SystemD

1

Eu instalei a linha principal nginx 1.13.9 usando o forneceu rpm no CentOS 7.4. Eu tive que usar este rpm porque eu sou forçado a fazer yum localinstall devido à governança da empresa.

Meu problema é que systemctl start nginx sempre gera isso:

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

journalctl me diz:

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

(O que você vê aqui é outra coisa da empresa: eu não devo colocar os arquivos conf sob o etc, eu tenho que mantê-los em um diretório onde eu não preciso de permissões de root para alterá-los)

Estas são as permissões definidas para o nginx.conf:

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

Reduzi o nginx.conf para um mínimo (absoluto) e tentei colocar arquivos de log, pid e similares em diretórios onde as permissões são concedidas com certeza. O log de erros não contém absolutamente nada.

Este é o meu nginx.conf reduzido:

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/;
    }
  }
}

E esta é a minha definição nginx.service ligeiramente modificada:

[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

(Você pode ver que eu tentei forçar um error_log apenas no caso do nginx falhar antes que o nginx.conf seja lido)

Quando eu faço sudo -u nginx /usr/sbin/nginx -c /var/opt/nginx/config/nginx.conf -g "error_log /tmp/error.log debug;" , isso funciona muito bem. Apesar de um curto aviso, o processo começa bem:

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

Tenho certeza que deve ser algum erro estúpido, mas não tenho idéia de qual.

    
por Marged 07.03.2018 / 09:29

1 resposta

0

Esse problema foi causado por dois erros que cometi:

  • permissões de diretório incorretas
  • uma associação de grupo ausente

Um dos diretórios estava faltando o x , então o processo não conseguiu atravessar o caminho. Eu tive que chmod g+X it. Além disso, eu tive que adicionar o usuário técnico do nginx (que no meu cenário não é o nginx padrão) para o grupo nginx.

    
por 08.08.2018 / 07:04

Tags