Не удалось остановить демон Nginx - PullRequest
14 голосов
/ 14 января 2012

У меня установлен сервер Ubuntu 11.04 i386 с установленным nginx 1.0.11.Кроме того, я использую этот скрипт init.d , единственный, который я нашел в нескольких разных местах.Он хорошо запускает сервер, однако, при остановке / сбросе он говорит

* Stopping Nginx Server...      [fail]

Конечно, демон не останавливается, и при перезапуске конфигурация не перезагружается.

Как я могуотремонтировать это?

Ответы [ 6 ]

28 голосов
/ 26 февраля 2012

Вероятно, он не может убить процесс.

Откройте скрипт sginvinit nginx, расположенный в /etc/init.d/ (или /etc/rc.d/), и найдите, где nginx.пид считается.Это будет что-то вроде "/var/run/nginx.pid".

Если файл pid отсутствует, откройте nginx.conf и найдите параметр pid.Если это несоответствие - установите значение conf в том месте, где, по мнению сценария, должно быть, например,

# pid of nginx process
pid /var/run/nginx.pid;
13 голосов
/ 06 октября 2014

sudo service nginx restart даст вам что-то вроде этого:

Stopping nginx:                                            [FAILED]
Starting nginx: nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
nginx: [emerg] still could not bind()

и затем вручную завершите процесс по их порту:

sudo fuser -k 80/tcp (или используйте любой порт, который вы используете)

альтернативно, убить процессы по их ID:

ps -ef |grep nginx
kill <pid>
3 голосов
/ 10 июля 2015

попробуйте эту команду:

sudo fuser -k 80/tcp
1 голос
/ 18 октября 2014

Я сталкивался с подобными проблемами.

Обычно я использую apache / apache2.

Вам может помочь следующее:

sudo nginx -s stop | ps -ef | grep nginx | awk {'print $2'} | xargs sudo kill -9 | sudo service apache2 start

Для документов, пожалуйста, обратитесь к этому Github Gist

0 голосов
/ 17 июня 2019

Причина этой проблемы

  • Когда вы запускаете nginx, он записывает pid в файл, определенный в nginx.conf
  • Когда вы запускаете service nginx stop, он останавливает процесс, PID которого определен в соответствии с /usr/lib/systemd/system/nginx.service (ваш путь может отличаться)
    • Это означает, что процесс фактически не остановлен.
  • Когда вы пытаетесь запустить его снова, он пытается подключиться к тому же порту и выдает ошибку.

По сути, вы пишете PID вместоположение A и пытается прочитать его из местоположения B. Это несоответствие, по-видимому, является основной причиной этой, очевидно, распространенной проблемы.

Решение

Правильное решение:

Нам нужноубедитесь, что места чтения и записи совпадают.

Как? : файл pid, определенный в nginx.conf и nginx.service, должен совпадать.

Исправление:

  1. lsof -i | grep nginx

Это даст вам pid.В моем случае их было два.

kill -9 pid1 kill -9 pid2 (может не потребоваться)
0 голосов
/ 18 января 2012

Вот скрипт инициализации nginx, который я изменил (на основе устаревшего официального скрипта инициализации ), который работает со многими дистрибутивами на основе Debian, включая Ubuntu 11.04:

https://github.com/hulihanapplications/nginx-init-debian

Это хорошо работает на моих серверах Ubuntu.Надеюсь это поможет.

...