Назад | Перейти на главную страницу

Запуск nginx с помощью systemctl не выполняется, но запуск команды вручную не выполняется.

В Arch Linux по какой-то причине, когда я пытаюсь запустить nginx с помощью команды «systemctl start nginx», он терпит неудачу, и это результат «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

... но когда я бегу

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

а потом

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

как root, все, что он делает, это возвращает предупреждение, но работает нормально:

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

Почему он это делает?

изменить: посмотрев в /var/log/messages.log, я нашел это:

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

но ls -l / home / nginx / usr / bin / nginx возвращает это:

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

..и каждый каталог, ведущий к / home / nginx / usr / bin /, имеет chmodded a + x

У меня возникла та же проблема, и это было связано с SELinux.

Чтобы проверить, запущен ли SELinux:

# getenforce

Чтобы отключить SELinux до следующей перезагрузки:

# setenforce Permissive

Перезапустите Nginx и посмотрите, сохраняется ли проблема. Если вы хотите навсегда изменить настройки, вы можете отредактировать /etc/sysconfig/selinux

Если ваша проблема заключается в SELinux, вы можете запустить следующее, чтобы разрешить nginx обслуживать ваш каталог www (убедитесь, что вы снова включили SELinux, прежде чем тестировать это, т. Е. setenforce Enforcing)

# chcon -Rt httpd_sys_content_t /path/to/www

Если у вас по-прежнему возникают проблемы, обратите внимание на логические флаги в getsebool -a, в частности, вам может потребоваться включить httpd_can_network_connect для доступа к сети

# setsebool -P httpd_can_network_connect on

Для меня этого было достаточно, чтобы http обслуживал мой каталог www.