Не удается перезапустить nginx

Вопрос или проблема

Мне нужно перезапустить процесс. Что делать, когда я продолжаю видеть эти сообщения? Нужны ли дополнительные команды?

$ 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()

$ service nginx start
Job for nginx.service failed because the control process exited with error code. See "systemctl status nginx.service" and "journalctl -xe" for details.

$ systemctl status nginx.service
● nginx.service - A high performance web server and a reverse proxy server
   Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled)
   Active: failed (Result: exit-code) since Wed 2019-05-29 13:28:29 KST; 26s ago
  Process: 24508 ExecStop=/sbin/start-stop-daemon --quiet --stop --retry QUIT/5 --pidfile /run/nginx.pid (code=exited, status=0/SUCCESS)
  Process: 31955 ExecStart=/usr/sbin/nginx -g daemon on; master_process on; (code=exited, status=1/FAILURE)
  Process: 31952 ExecStartPre=/usr/sbin/nginx -t -q -g daemon on; master_process on; (code=exited, status=0/SUCCESS)
 Main PID: 13077 (code=exited, status=0/SUCCESS)

May 29 13:28:27 ip-172-26-12-170 nginx[31955]: nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
May 29 13:28:27 ip-172-26-12-170 nginx[31955]: nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
May 29 13:28:28 ip-172-26-12-170 nginx[31955]: nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
May 29 13:28:28 ip-172-26-12-170 nginx[31955]: nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
May 29 13:28:29 ip-172-26-12-170 nginx[31955]: nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
May 29 13:28:29 ip-172-26-12-170 nginx[31955]: nginx: [emerg] still could not bind()
May 29 13:28:29 ip-172-26-12-170 systemd[1]: nginx.service: Control process exited, code=exited status=1
May 29 13:28:29 ip-172-26-12-170 systemd[1]: Failed to start A high performance web server and a reverse proxy server.
May 29 13:28:29 ip-172-26-12-170 systemd[1]: nginx.service: Unit entered failed state.
May 29 13:28:29 ip-172-26-12-170 systemd[1]: nginx.service: Failed with result 'exit-code'.

Приложение в настоящее время использует порт 80. Скорее всего, это другая инстанция nginx.

Найти приложение, прослушивающее сокет

С помощью команды netstat можно найти приложение, которое в данный момент прослушивает сокет. Также используйте grep для фильтрации вывода netstat.

$ netstat -lpn | grep 80
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      780/nginx: master p 
tcp6       0      0 :::80                   :::*                    LISTEN      780/nginx: master p

Последняя запись в списке 780/nginx указывает PID процесса, который в данный момент использует порт 80.

Найти и завершить приложение

С помощью ps вы можете увидеть структуру процесса, использующего сокет:

$ ps f -g780
   PID TTY      STAT   TIME COMMAND
   780 ?        Ss     0:00 nginx: master process nginx
   781 ?        S      0:00  \_ nginx: worker process
   782 ?        S      0:00  \_ nginx: worker process
   783 ?        S      0:00  \_ nginx: worker process
   784 ?        S      0:00  \_ nginx: worker process
   785 ?        S      0:00  \_ nginx: worker process
   786 ?        S      0:00  \_ nginx: worker process
   787 ?        S      0:00  \_ nginx: worker process
   788 ?        S      0:00  \_ nginx: worker process

С помощью команды kill вы можете завершить процесс, который использует сокет:

$ kill 780

Если процесс не завершается, используйте -9:

$ kill -9 780

После этого попробуйте перезапустить сервис nginx.

В будущем это может быть полезно. Вы можете проверить синтаксис файлов конфигурации Nginx, запустив:

nginx -t -c /etc/nginx/nginx.conf

Вывод ошибки подскажет, в чем проблема, а также укажет номер строки.

или:

отладка с помощью команды:

$ service nginx configtest

Вывод будет примерно таким:

Testing nginx configuration: nginx: [emerg] unknown directive “stub_status” in /etc/nginx/sites-enabled/nginx_status:11
nginx: configuration file /etc/nginx/nginx.conf test failed

.

Ответ или решение

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

Проблема

Вы получаете следующие сообщения об ошибке при попытке перезапустить nginx:

nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)

Это говорит о том, что порт 80 уже занят другим процессом. Наиболее вероятно, что это другой экземпляр nginx или другая служба, занимающая этот порт.

Шаги по решению проблемы

  1. Поиск процесса, занимающего порт 80

    Используйте команду netstat, чтобы определить, какой процесс в данный момент слушает на порту 80:

    $ netstat -lpn | grep 80

    Вы получите PID процесса, который использует этот порт, например, 780/nginx: master p, что указывает на то, что процесс с PID 780 в данный момент занимает порт 80.

  2. Просмотр структуры процесса

    Воспользуйтесь командой ps, чтобы увидеть дочерние процессы, связанные с этим PID:

    $ ps f -g780

    Это покажет вам информацию о мастере и рабочих процессах nginx.

  3. Завершение процесса

    Используйте команду kill для завершения процесса, который блокирует порт:

    $ kill 780

    Если процесс не завершается, используйте принудительное завершение:

    $ kill -9 780
  4. Проверка конфигурации nginx

    Убедитесь, что файлы конфигурации nginx не содержат ошибок. Для этого выполните:

    $ nginx -t -c /etc/nginx/nginx.conf

    Это обеспечит, что файлы конфигурации корректны и готовы к использованию.

    Также можно использовать специальную команду для проверки конфигурации:

    $ service nginx configtest

Заключение

После выполнения вышеуказанных шагов вы сможете успешно перезапустить службу nginx. Эти действия помогут избежать периода простоя и проблем с доступом. Применяйте их всякий раз, когда сталкиваетесь с проблемами перезапуска nginx. Это гарантирует бесперебойную работу веб-сервера, улучшая тем самым пользовательский опыт и рабочую эффективность.

Оцените материал
Добавить комментарий

Капча загружается...