Nginx: задание для nginx.service не выполнено из-за выхода из процесса управления

У меня проблема, которую я пытался исправить в течение нескольких дней, и я не знаю, что делать, искал ответы, но все те, кого я нашел, не помогли мне.

Я здесь новичок, и я очень надеюсь, что кто-то может мне помочь. Вы можете сказать мне, какую информацию мне нужно дать в надежде найти решение.

$ systemctl status nginx.service
nginx.service - Startup script for nginx service
   Loaded: loaded (/usr/lib/systemd/system/nginx.service; enabled; vendor preset: disabled)
   Active: failed (Result: exit-code) since Tue 2016-03-08 13:23:35 GMT; 2min 20s ago

Mar 08 13:23:33 startdedicated.com nginx[8315]: nginx: [emerg] bind() to ------------ f...e)
Mar 08 13:23:33 startdedicated.com nginx[8315]: nginx: [emerg] bind() to ----- f...e)
Mar 08 13:23:34 startdedicated.com nginx[8315]: nginx: [emerg] bind() to ----- f...e)
Mar 08 13:23:34 startdedicated.com nginx[8315]: nginx: [emerg] bind() to ----- f...e)
Mar 08 13:23:35 startdedicated.com nginx[8315]: nginx: [emerg] bind() to ----- f...e)
Mar 08 13:23:35 .startdedicated.com nginx[8315]: nginx: [emerg] still could not bind()
Mar 08 13:23:35 startdedicated.com systemd[1]: nginx.service: control process exited, code=...=1
Mar 08 13:23:35 startdedicated.com systemd[1]: Failed to start Startup script for nginx service.
Mar 08 13:23:35 startdedicated.com systemd[1]: Unit nginx.service entered failed state.
Mar 08 13:23:35 startdedicated.com systemd[1]: nginx.service failed.

Ответы

Ответ 1

Попробуйте выполнить следующие две команды:

sudo fuser -k 80/tcp

sudo fuser -k 443/tcp

Затем выполните

sudo service nginx restart

Если это сработало, ваш хостинг-провайдер может установить Apache на ваш сервер по умолчанию во время новой установки, поэтому продолжайте читать, чтобы найти более постоянное исправление. Если это не сработало, продолжайте читать, чтобы определить проблему.

Запустите nginx -t и если он ничего не вернет, я бы проверил журнал ошибок Nginx. По умолчанию он должен находиться в /var/log/nginx/error.log.

Вы можете открыть его в любом текстовом редакторе: sudo nano/var/log/nginx/error.log

Вы можете найти там что-нибудь подозрительное?

Второй журнал, который вы можете проверить, следующий

sudo nano/var/log/syslog

Когда у меня возникла эта проблема, это было потому, что мой хостинг-провайдер автоматически устанавливал Apache во время чистой установки. Это был блокирующий порт 80.

Когда я выполнил sudo nano/var/log/nginx/error.log я получил следующее как журнал ошибок:

2018/08/04 06:17:33 [emerg] 634#0: bind() to 0.0.0.0:80 failed (98: Address already in use)
2018/08/04 06:17:33 [emerg] 634#0: bind() to [::]:80 failed (98: Address already in use)
2018/08/04 06:17:33 [emerg] 634#0: bind() to 0.0.0.0:80 failed (98: Address already in use)

Вышеуказанная ошибка говорит о том, что он не смог привязать nginx к порту 80, потому что он уже использовался.

Чтобы это исправить, вам нужно запустить следующее:

yum install net-tools

sudo netstat -tulpn

Когда вы выполните вышеуказанное, вы получите что-то вроде следующего:

Proto Recv-Q Send-Q Local Address           Foreign Address         State    PID/Program name
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      1762/httpd
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      1224/sshd
tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN      1528/sendmail:acce
tcp6       0      0 :::22                   :::*                    LISTEN      1224/sshd

Вы можете видеть, что порт 80 заблокирован httpd (Apache). Это также может быть порт 443, если вы используете SSL.

Получите PID процесса, который использует порт 80 или 443. И отправьте команду kill, изменив значение <PID>:

sudo kill -2 <PID>

Обратите внимание, что в моем примере значение PID Apache было 1762 поэтому я бы выполнил sudo kill -2 1762

В качестве альтернативы вы можете выполнить следующее:

sudo fuser -k 80/tcp

sudo fuser -k 443/tcp

Теперь, когда порт 80 или 443 свободен, вы можете запустить Nginx, выполнив следующее:

sudo service nginx restart

Также рекомендуется удалить все, что ранее блокировало порты 80 и 443. Это позволит избежать любых конфликтов в будущем. Поскольку Apache (httpd) блокировал мои порты, я удалил его, выполнив следующее:

yum remove httpd httpd-devel httpd-manual httpd-tools mod_auth_kerb mod_auth_mysql mod_auth_pgsql mod_authz_ldap mod_dav_svn mod_dnssd mod_nss mod_perl mod_revocator mod_ssl mod_wsgi

Надеюсь это поможет.

Ответ 2

Может оказаться полезным проверить синтаксис файлов конфигурации Nginx, запустив:

nginx -t -c /etc/nginx/nginx.conf

Ответ 3

Попробуйте отладить команду:

$ service nginx configtest

Что выводит что-то вроде:

Testing nginx configuration: nginx: [emerg] unknown directive "stub_status" in /etc/nginx/sites-enabled/nginx_status:11
nginx: configuration file /etc/nginx/nginx.conf test failed

И исправить эти предупреждения

Затем перезапустите nginx

Ответ 4

В моем случае это из-за того, что сервер apache работает как-то. Поэтому я остановил Apache, затем перезапустил nginx. Работай как шарм!

sudo /etc/init.d/apache2 stop
sudo systemctl restart nginx

Ответ 5

Когда что-то не может привязываться к порту, оно составляет 5%, потому что оно не запускается с помощью root (липкий suid бит, sudo) и 94%, потому что другое приложение уже привязано к этому порту.

Убедитесь, что nginx действительно выключен, и вы не пытаетесь запустить его дважды случайно.

Убедитесь, что у вас нет Apache или других служб, которые используют порт 80.

Использовать netstat -a | grep tcp netstat -a | grep tcp чтобы узнать больше.

Ответ 6

смена порта может помочь, так как 80 порт уже где-то используется

vi /etc/nginx/sites-available/default

Изменить порт:

listen 8080 default_server;
listen [::]:8080 default_server;

А затем перезапустите сервер nginx

nginx -t
service nginx restart

Ответ 7

У меня была такая же проблема, когда я использовал Vesta, которая использует nginx с apache. Проблема заключалась в том, что после применения всех обновлений Apache начал прослушивать 443 для https. Решение состояло в том, чтобы просто прокомментировать 443 вещи в ports.conf. Это связано с тем, что nginx также использует этот порт.

Ответ 8

$ ps ax | grep nginx<br>
$ kill -9 PIDs
$ service nginx start



или вернитесь назад /etc/nginx/sites-available/default

местоположение/{
& emsp; & emsp; & emsp; & emsp;# Сначала попытка обработать запрос как файл, затем
& emsp; & emsp; & emsp; & emsp; # как каталог, затем вернемся к отображению 404.

& emsp; & emsp; & emsp; & emsp; try_files $ uri $ uri/= 404;
    }

Ответ 9

Проверьте df -h, если вы находитесь под системой centOS

Ответ 10

В моем случае nginx не смог открыть файл журнала, который находится здесь /var/log/nginx/error.log

Это было потому, что я удалил каталог журналов, чтобы освободить место в корне (что оказалось глупо)

Затем я создал папку журнала в var и папку nginx в журнале.

Затем просто запустите sudo service nginx start

Ответ 11

Причиной проблемы является то, что у меня уже был установлен веб-сервер Apache и он активно прослушивает порт 80 на моей локальной машине.

Apache и Nginx являются двумя основными высокопроизводительными веб-серверами с открытым исходным кодом, способными обрабатывать различные рабочие нагрузки для удовлетворения потребностей современных веб-сайтов. Однако Apache служит главным образом как HTTP-сервер, тогда как Nginx является высокопроизводительным асинхронным веб-сервером и обратным прокси-сервером.

Невозможность запуска Nginx была вызвана тем, что Apache уже прослушивал порт 80 в качестве порта по умолчанию, который также является портом по умолчанию для Nginx.

Одним из быстрых решений было бы остановить Apache сервер, выполнив команду ниже

systemctl stop apache2
systemctl status apache2

А затем запустите Nginx сервер, выполнив следующую команду

systemctl stop nginx
systemctl status nginx

Однако эта же проблема возникнет снова, когда мы попытаемся снова запустить сервер Apache, так как они оба используют порт 80 в качестве порта по умолчанию.

Вот как я это исправил

Запустите команду ниже, чтобы открыть файл конфигурации по умолчанию Nginx в редакторе Nano

sudo nano /etc/nginx/sites-available/default

Когда файл откроется в редакторе Nano, прокрутите вниз и измените порт сервера по умолчанию на любой порт по вашему выбору. Для меня я решил изменить его на порт 85

# Default server configuration
#
server {
       listen 85 default_server;
       listen [::]:85 default_server;

Кроме того, прокрутите вниз и измените порт виртуального хоста на любой порт по вашему выбору. Для меня я также решил изменить его на порт 85

# Virtual Host configuration for example.com
#
# You can move that to a different file under sites-available/ and symlink that
# to sites-enabled/ to enable it.
#
# server {
#        listen 85;
#        listen [::]:85;

Затем выйдите из файла, нажав на клавиатуре

Ctrl + X

А затем нажмите Y на клавиатуре, чтобы сохранить изменения.

Это все.

надеюсь, это поможет

Ответ 12

Попробуйте установить пользователя в nginx.conf, возможно, поэтому он не может запустить службу:

User www-data;

Ответ 13

В моем случае мне нужно запустить

sudo nginx -t

Он проверит правильность конфигурации Nginx или, если нет, покажет, какая конфигурация вызывает ошибку.

Затем вам нужно перейти на /etc/nginx/sites-available, чтобы исправить неисправную конфигурацию.

После этого вы можете без проблем перезапустить Nginx.

sudo systemctl restart nginx

Ответ 14

Я использую RHEL 7.4 с NGINX 1.13.8, и если я делаю то же самое с sudo, он работает Ok:

sudo systemctl status nginx.service

Просто убедитесь, что тот, кто хочет использовать nginx.service имеет права на выполнение.

Ответ 15

  • используйте эту команду для

    1. sudo service apache2 stop

    2. sudo apt-get purge apache2

    3. Обновление sudo apt-get

    4. sudo apt-get install nginx

    5. sudo service nginx restart