2012-01-13 2 views
12

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

* Stopping Nginx Server...  [fail] 

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

Как это можно исправить?

ответ

28

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

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

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

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

для меня, это был '/ бег/nginx.pid' в nginx.conf я заменил '/ var/run/nginx.pid', и он сработал. благодаря! –

+0

в моей проблеме были кавычки для этого пути –

+0

Спасибо - я видел файл pid в обоих каталогах, но изменение init и nginx.conf для указания на «var» dir вместо этого решило ту же проблему на моем сценарии остановки/перезапуска , – Scott

0

Вот сценарий инициализации Nginx, что я изменил (на основе устаревших offical init script), который работает со многими DEBiAN на основе дистрибутивы, включая Ubuntu 11.04:

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

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

5

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> 
1

У меня были подобные проблемы.

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

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

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

Для документации смотрите этот Github Gist

+0

Это сработало для меня. Спасибо, что поделился. –

3

попробовать эту команду:

sudo fuser -k 80/tcp 
Смежные вопросы