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