Столбец демонов Nginx терпит неудачу
У меня есть сервер Ubuntu 11.04 i386 с установленным nginx 1.0.11. Кроме того, я использую этот init.d script, единственный, который я нашел в нескольких разных местах. Он прекрасно запускает сервер, однако, на stop/reset он говорит
* Stopping Nginx Server... [fail]
Конечно, демон не останавливается, и после перезагрузки конфигурация не перезагружается.
Как я могу это исправить?
Ответы
Ответ 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
должен совпадать.
Исправление:
-
lsof -i | grep nginx
Это даст вам пид. В моем случае их было двое.
-
kill -9 pid1
-
kill -9 pid2
(может не потребоваться)
Ответ 7
Здесь скрипт инициализации nginx, который я модифицировал (на основе официального скрипта инициализации), я делаю скрипт скриптом
lockfile=$pidfile
и переменная
pidfile="/var/run/nginx.pid"
Затем я изменил файл конфигурации (nginx.conf
), я делаю переменную
pid="/var/run/nginx.pid"
тоже.
Наконец, я могу нормально использовать все команды nginx.