Iniciar o nginx com systemctl falha, mas executar o comando manualmente não

2

No Arch Linux, por algum motivo, quando tento iniciar o nginx com o comando "systemctl start nginx", ele falha, sendo esta a saída de "systemctl status nginx":

Loaded: loaded (/etc/systemd/system/nginx.service; enabled)
Active: failed (Result: exit-code) since Wed 2013-10-30 16:22:17 EDT; 5s ago
Process: 9835 ExecStop=/usr/bin/chroot --userspec=http:http /home/nginx /usr/bin/nginx -g pid /run/nginx.pid; -s quit (code=exited, status=126)
Process: 3982 ExecStart=/usr/bin/chroot --userspec=http:http /home/nginx /usr/bin/nginx -g pid /run/nginx.pid; daemon on; master_process on; (code=exited, status=0/SUCCESS)
Process: 10967 ExecStartPre=/usr/bin/chroot --userspec=http:http /home/nginx /usr/bin/nginx -t -q -g pid /run/nginx.pid; daemon on; master_process on; (code=exited, status=126)
Main PID: 3984 (code=exited, status=0/SUCCESS)
CGroup: /system.slice/nginx.service

... mas quando eu corro

/usr/bin/chroot --userspec=http:http /home/nginx /usr/bin/nginx -t -q -g "pid /run/nginx.pid; daemon on; master_process on;"

e depois

/usr/bin/chroot --userspec=http:http /home/nginx /usr/bin/nginx -g "pid /run/nginx.pid; daemon on; master_process on;"

como root, tudo o que faz é retornar um aviso, mas funciona bem:

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

Por que isso está acontecendo?

edite: Depois de procurar em /var/log/messages.log, encontrei isto:

/usr/bin/chroot: failed to run command ‘/usr/bin/nginx’: Permission denied

mas ls -l / home / nginx / usr / bin / nginx retorna isso:

-rwxr-xr-x 1 root root 797040 Oct 25 18:24 nginx

.. e todo diretório que leva a / home / nginx / usr / bin / é chmodded a + x

    
por Ivan 30.10.2013 / 21:28

1 resposta

3

Eu tive o mesmo problema e foi devido ao SELinux .

Para verificar se o SELinux está sendo executado:

# getenforce

Para desativar o SELinux até a próxima reinicialização:

# setenforce Permissive

Reinicie o Nginx e veja se o problema persiste. Se você quiser alterar permanentemente as configurações, você pode editar /etc/sysconfig/selinux

Se o SELinux for seu problema, você pode executar o seguinte para permitir que o nginx sirva seu diretório www (lembre-se de ativar o SELinux antes de testar isso, por exemplo, setenforce Enforcing )

# chcon -Rt httpd_sys_content_t /path/to/www

Se você ainda tiver problemas, veja os sinalizadores booleanos em getsebool -a , em particular, talvez seja necessário ativar httpd_can_network_connect para acesso à rede

# setsebool -P httpd_can_network_connect on

Para mim, foi o suficiente para permitir ao http servir meu diretório www.

    
por 07.10.2014 / 05:44