Я хочу остановить Nginx, но он терпит неудачу.
$ sudo service nginx stop
Stopping nginx: [FAILED]
И nginx.conf
который определяет место nginx.pid у строки.
# /etc/nginx/nginx.conf
pid /var/run/nginx.pid;
Но нет nginx.pid
в каталоге /var/run/
.
locate nginx.pid
показывает этот вывод.
/var/run/nginx.pid
/var/run/nginx.pid.oldbin
Но после updatedb
нет совпадения для поиска. Я использую nginx / 1.4.4 в CentOS release 6.5 (Final)
.
Что мне делать, чтобы остановить демон nginx?
Это результат ps -ef | grep nginx
, похоже, демон nginx все еще работает.
ironsand 17065 16933 0 15:55 pts/0 00:00:00 grep --color nginx
root 19506 1 0 2013 ? 00:00:00 nginx: master process /usr/sbin/nginx -c /etc/nginx/nginx.conf
ironsand 19507 19506 0 2013 ? 00:00:25 nginx: worker process
И sudo service nginx restart
дает эту ошибку. думаю nginx
не запускается, потому что старый еще жив. И /var/log/nginx/error.log-2014017
также содержит эту ошибку.
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()
[FAILED]
Я рекомендую остановить nginx, предварительно убив его главный процесс. Nginx не выключается должным образом, возможно, из-за этого его нельзя остановить с помощью сценария инициализации.
пс -ef | grep nginx
Это покажет вам PID главного процесса nginx. Как вы упомянули выше:
корень 19506 1 0 2013? 00:00:00 nginx: главный процесс / usr / sbin / nginx -c /etc/nginx/nginx.conf
Убить его, используя
kill -9 19506
Еще раз проверьте, запущен ли какой-либо процесс nginx или занят ли порт 80. Если вы видите, что какой-либо процесс привязан к порту 80, определите PID и проверьте, можно ли его убить.
пс -ef | grep nginx
netstat -tulpn | grep 80
убедитесь, что файловая система в порядке, и вы можете читать / писать в файловую систему / var. Затем запустите nginx
запуск службы nginx
Для меня имя файла pid в этих двух файлах было другим:
pid /var/run/nginx.pid;
PIDFile=/run/nginx.pid
Эти двое должны совпадать.
Поэтому я настроил его в /usr/lib/systemd/system/nginx.service, а затем сделал:
systemctl daemon-reload
systemctl start nginx
Тогда это подошло правильно.
У меня была эта проблема, и я бегу ps -ef | grep nginx
покажет мне рабочих, которые будут продолжать раскручиваться, несмотря на убийство главного процесса, как это было предложено в принятом ответе:
[~]# ps -ef | grep nginx
nginx 10730 1 0 Sep14 ? 00:00:16 nginx: cache manager process
nginx 18469 1 0 Oct09 ? 00:11:02 nginx: worker process
nginx 25779 1 0 Oct13 ? 00:01:31 nginx: worker process
nginx 26458 1 0 15:45 ? 00:00:00 nginx: worker process
Так мое решение исправить это было просто так: pkill nginx && service nginx restart
Моя проблема заключалась в том, что у меня pid
указан в двух разных файлах conf. После того, как я удалил одну ссылку, удалил .pid
файл и снова запустил nginx, он начал вести себя нормально.
Похоже, это указывает на то, что nginx сразу дает сбой, если он был запущен раньше. Вы проверили содержимое /var/log/nginx*
чтобы увидеть, что происходит в процессе?
РЕДАКТИРОВАТЬ: Кроме того, если вы сообщите нам свою ОС и версию nginx, мы сможем дать более подробные ответы.
Чтобы быть уверенным, мне нужна дополнительная информация, но, полагаю, у вас уже есть другой веб-сервер запущен, а не экземпляр ngnix, который вам нужен, поэтому вам нужно его найти - ошибка говорит о том, что порт 80 используется, но не каким
Пытаться netstat -tulpn
- Вы ищете запись под локальным адресом, которая заканчивается на: 80 - это также даст вам имя программы и PID, чтобы вы могли ее идентифицировать. Вот мой - я запускаю lighttpd, и он показан в третьей строке.
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 127.0.0.1:5000 0.0.0.0:* LISTEN 4684/rtorrent
tcp 0 0 127.0.0.1:9000 0.0.0.0:* LISTEN 923/php-fpm.conf)
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 972/lighttpd
tcp 0 0 0.0.0.0:6901 0.0.0.0:* LISTEN 4684/rtorrent
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 720/sshd
tcp6 0 0 :::22 :::* LISTEN 720/sshd
udp 0 0 0.0.0.0:6881 0.0.0.0:* 4684/rtorrent
Выключите другой веб-сервер должным образом (поскольку, если его порождение происходит от выскочки, обычное «уничтожение» может не сработать) и попробуйте запустить ngnix. Если это так, вы можете / должны отредактировать свои сценарии инициализации, чтобы остановить запуск другого веб-сервера, или настроить его конфигурацию на другом источнике питания.
У меня была аналогичная проблема с Ubuntu 10.10 и скомпилированной версией nginx, работающей в / opt / nginx / sbin.
проверьте оба файла /opt/nginx/conf/nginx.conf и /etc/nginx/nginx.conf и убедитесь, что они совпадают.
Настройте файл запуска /etc/init.d/nginx в соответствии с тестом местоположения nginx.pid, используя:
sudo /etc/init.d/nginx configtest # should show no failures
sudo /etc/init.d/nginx start # should show starting
sudo /etc/init.d/nginx status # should show running
sudo /etc/init.d/nginx stop # should show stopping -- (wait for a few)
sudo /etc/init.d/nginx status # should show can not access PID file for nginx
sudo netstat -tap # should not show nginx program running with open local address
Чтобы остановить nginx, ознакомьтесь с руководством, как это сделать man nginx
.
По умолчанию следует использовать стоп-сигнал с nginx -s stop
.
Должно быть действительно так просто. Ваши варианты:
stop, quit, reopen, reload.
Попробуй это:
sudo fuser -k 443/tcp
sudo fuser -k 80/tcp
Нашел здесь: https://www.digitalocean.com/community/questions/nginx-is-unable-to-bind-to-443