Подтвердить что ты не робот

Столбец демонов Nginx терпит неудачу

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

* Stopping Nginx Server...      [fail]

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

Как я могу это исправить?

4b9b3361

Ответ 1

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

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

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

# pid of nginx process
pid /var/run/nginx.pid;

Ответ 2

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 (или использовать любой порт, который вы используете)

альтернативно, убейте процессы по их идентификатору:

ps -ef |grep nginx
kill <pid>

Ответ 3

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

sudo fuser -k 80/tcp

Ответ 4

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

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

Следующие могут помочь вам:

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

Для документов обращайтесь к Github Gist

Ответ 5

Здесь nginx init script, который я изменил (на основе устаревшего offical init script), который работает со многими debian-based дистрибутивы, в том числе Ubuntu 11.04:

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

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

Ответ 6

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

  • Когда вы запускаете 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

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

  1. kill -9 pid1
  2. kill -9 pid2 (может не потребоваться)

Ответ 7

Здесь скрипт инициализации nginx, который я модифицировал (на основе официального скрипта инициализации), я делаю скрипт скриптом

lockfile=$pidfile 

и переменная

pidfile="/var/run/nginx.pid"

Затем я изменил файл конфигурации (nginx.conf), я делаю переменную

pid="/var/run/nginx.pid" 

тоже.

Наконец, я могу нормально использовать все команды nginx.