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

Ошибка Ubuntu с apache: (98) Адрес уже используется

Я получаю эту ошибку, когда пытаюсь запустить Apache в Ubuntu.

 (98)Address already in use: make_sock: could not bind to address 0.0.0.0:80
 no listening sockets available, shutting down
 Unable to open logs
 Action 'start' failed.

У меня это в моем ports.conf

NameVirtualHost *:80
Listen 80

Это мой файл vhost

<VirtualHost *:80>
          ServerAdmin [email protected]
          ServerName rails.server.com
          # ServerAlias
          DocumentRoot /var/www/sample_app/current/public
          ErrorLog /var/www/sample_app/error.log

          RailsEnv production
        <Directory "/var/www/sample_app/current/public">
          Options Indexes FollowSymLinks MultiViews
          Order allow,deny
          Allow from all
        </Directory>
</VirtualHost>

Что мне не хватает?

4b9b3361

Ответ 1

Кажется, порт 80 уже сделан. Используйте другой порт или попробуйте netstat (grep результат, чтобы выбрать только строку со значением 80 в ней), ps и kill, чтобы узнать, какое приложение занимает порт и закрывает его.

Ответ 2

netstat -ltnp | grep: 80

Это вернет следующее:

tcp6 0 0: 80: * LISTEN 1047/apache2

Затем выполните следующую команду:

sudo kill -9 1047

(1047 - pid no)

(pid, который появляется в вашем конкретном экземпляре.)

Перезапустите Apache.

sudo service apache2 restart

Ссылка на Форумы Ubuntu.

Ответ 3

Во всех случаях убийство процесса может не работать, поскольку процесс, использующий порт 80, перезапускается и не позволяет использовать порт. Итак, что можно сделать, это изменить порт для apache, если это не имеет значения.

Для этого нужно изменить две вещи:

  • Откройте /etc/apache2/ports.conf с любым текстовым редактором и измените значение записи Listen 80 на нужный порт (например, Listen 8080).

  • Измените запись для <virtualhost 80> на тот же номер порта, который вы указали в файле /etc/apache2/ports.conf, в /etc/apache2/sites/enabled/000-default (например, <virtualhost 8080>).

Ответ 4

Убедитесь, что у вас нет команды Listen 80 в нескольких местах.

В моем случае я получал ту же ошибку, и причина в том, что эта команда была как в ports.conf, так и по сайтам с включенным/000-умолчанию.

Ответ 5

В моем случае это был nginx (потому что у меня это на моем сервере).

sudo service nginx stop
sudo service apache2 start

Ответ 6

sudo netstat -tulpn| grep :80

pkill процесс (nginx?)

Отключить, какой виртуальный хост привязан к порту 80, который вы не хотите (nginx?). Это в /etc/nginx/sites -enabled или/etc/apache2/sites-enabled

Ответ 7

sudo kill -9 -2321 (pid) Перезапустить BT Готово..... нет необходимости вносить изменения в conf. файл.

Ответ 8

При перезапуске или запуске сервера через терминал вы можете забыть добавить sudo перед командой.

Используйте sudo /etc/init.d/apache2 reload вместо /etc/init.d/apache2 reload

Ответ 9

У меня была такая же проблема с совершенно другой причиной. Я запускаю Apache 2.4.7 с PHP 5.5.6 на CentOS 6.5.

Я испортил php.ini, имея BOTH output_handler = ob_gzhandler И zlib.output_compression = On (можно установить один из них, а не оба).

Таким образом, при перезапуске Apache он привязывается к порту 80, но больше ничего не происходит. Похоже, что он работает, но php-ошибка заблокировала его где-то.

Ключ должен был проверить "php -v"... когда я увидел, что он ничего не возвращает (он написал ошибку error_log), я исправил php.ini, и Apache снова был счастлив.

Может быть, это помогает кому-то...

Ответ 10

Я получил эту ошибку при новой установке Ubuntu 12.10 при запуске apache2.

Это ошибка в apache2. Он завис в фоновом режиме. Вот мое пошаговое руководство, где ошибки могут быть в программном обеспечении.

Вот ошибка, которую я получил:

[email protected]:~$ sudo service apache2 start
 * Starting web server apache2               
(98)Address already in use: make_sock: could not bind to address 0.0.0.0:80
no listening sockets available, shutting down
Unable to open logs
Action 'start' failed.
The Apache error log may have more information.
                                                                         [fail]

Адрес уже используется? Что можно использовать? Проверьте это:

[email protected]:~$ grep -ri listen /etc/apache2
/etc/apache2/apache2.conf:#   supposed to determine listening ports for incoming connections, and which
/etc/apache2/apache2.conf:# Include list of ports to listen on and which to use for name based vhosts
/etc/apache2/ports.conf:Listen 80
/etc/apache2/ports.conf:    Listen 443
/etc/apache2/ports.conf:    Listen 443

Это означает, что apache2 предотвращает запуск apache2. Bizarre. Это подтвердит:

[email protected]:~$ ps -ef | grep apache2
root      1146   954  0 15:51 ?        00:00:00 /bin/sh /etc/rc2.d/S91apache2 start
root      1172  1146  0 15:51 ?        00:00:00 /bin/sh /usr/sbin/apache2ctl start
root      1181  1172  0 15:51 ?        00:00:00 /usr/sbin/apache2 -k start
root      1193  1181  0 15:51 ?        00:00:00 /bin/bash /usr/share/apache2/ask-for-passphrase 127.0.1.1:443 RSA
el        5439  5326  0 16:23 pts/2    00:00:00 grep --color=auto apache2

Да, в этом случае apache2 работает, я пытался запустить apache2 второй раз на том же порту.

Что меня смущает, так это то, что service сообщает, что apache2 НЕ работает:

[email protected]:~$ sudo service apache2 status
Apache2 is NOT running.

И когда вы запрашиваете apache2ctl для своего статуса, он зависает.

[email protected]:~# /usr/sbin/apache2ctl status
**hangs until Ctrl-C is pressed.

Таким образом, Ubuntu, похоже, не справляется с управлением apache2 при загрузке. Время остановки apache2:

[email protected]:~# /usr/sbin/apache2ctl stop
httpd (no pid file) not running

Большая подсказка! Вы пытаетесь остановить apache2, и он потерял идентификатор процесса! Поэтому Ubuntu не может остановить apache2, потому что он не знает, где он находится!

Вы могли бы подумать, что перезагрузка исправит его, но это происходит не потому, что apache2 запускается при загрузке и зависает. Обычный процесс загрузки для apache2 работает неправильно.

Итак, как это исправить?

Я смог исправить этот, проанализировав вывод команды ps. Обратите внимание, что команда ps сообщает нам, что этот процесс был запущен с помощью "/etc/rc2.d/S91apache2 start".

Это оскорбительная программа, которая требует быстрого удара.

/etc/rc2.d/S91apache2 - это символическая ссылка, используемая для запуска apache2 для вас при запуске компьютера. По какой-то причине это похоже на запуск apache2, а затем зависает. Поэтому мы должны будем сказать, чтобы это не делалось.

Итак, взгляните на это /etc/rc2.d/S91apache2.

[email protected]:/etc/rc2.d$ ls -l
lrwxrwxrwx   1 root root    17 Nov  7 21:45 S91apache2 -> ../init.d/apache2*

Это символическая ссылка, которую мы не хотим, чтобы она была там. Сделайте это, чтобы предотвратить запуск apache2 при загрузке:

[email protected]:~# sudo update-rc.d -f apache2 remove
 Removing any system startup links for /etc/init.d/apache2 ...
   /etc/rc0.d/K09apache2
   /etc/rc1.d/K09apache2
   /etc/rc2.d/S91apache2
   /etc/rc3.d/S91apache2
   /etc/rc4.d/S91apache2
   /etc/rc5.d/S91apache2
   /etc/rc6.d/K09apache2

Перезагрузите компьютер, чтобы убедиться, что apache2 не запускается и не зависает. Хорошо. Теперь вы можете вернуть apache2 так, как это было, но это может привести к сбою.

[email protected]:~$ sudo update-rc.d apache2 defaults     //(don't do this)
 Adding system startup for /etc/init.d/apache2 ...
   /etc/rc0.d/K20apache2 -> ../init.d/apache2
   /etc/rc1.d/K20apache2 -> ../init.d/apache2
   /etc/rc6.d/K20apache2 -> ../init.d/apache2
   /etc/rc2.d/S20apache2 -> ../init.d/apache2
   /etc/rc3.d/S20apache2 -> ../init.d/apache2
   /etc/rc4.d/S20apache2 -> ../init.d/apache2
   /etc/rc5.d/S20apache2 -> ../init.d/apache2

Вместо этого запустите apache2 следующим образом:

sudo service apache2 start

И apache2 снова поддерживает и обслуживает страницы. Кажется, есть некоторые серьезные ошибки с apache2/Ubuntu 12.10, которые заставляют apache2 запускаться и зависать. Это временное решение, я полагаю, что исправление заключается в том, чтобы получить более новые версии apache2 и Ubuntu и надеяться на лучшее.

Ответ 11

В моем случае я удалил файл ssl.conf по умолчанию (переименован в ssl.conf.bak) и имел свой собственный конфигурационный файл ssl.

Затем я сделал yum update и обновил apache... Который также снова ввел файл ssl.conf, что означает, что у меня было 2 файла conf с Listen 443.

Решение (generic - CentOS): перейдите к /etc/httpd/conf.d, выполните grep -r 'Listen' ., посмотрите, есть ли у вас дубликаты операторов Listen XXX, удалите их по мере необходимости.

Ответ 12

Список текущих запущенных служб,

$ sudo netstat -tulpn

Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 0.0.0.0:8069            0.0.0.0:*               LISTEN      6399/python     
tcp        0      0 0.0.0.0:53670           0.0.0.0:*               LISTEN      6681/Brackets-node
....
....

Найти только определенные службы,

$ sudo netstat -tulpn| grep python
[email protected]:~/odoo/master-hr-holidays-newapi-jpa$ sudo netstat -tulpn| grep python
tcp        0      0 0.0.0.0:8069            0.0.0.0:*               LISTEN      6399/python     
tcp        0      0 127.0.0.1:41974         0.0.0.0:*               LISTEN      3123/python 

Вы заметили выше результат PID (6399), на котором запущен python.

Убейте эту службу, используя следующую команду:

$ sudo kill -9 -6399

Теперь службы полностью останавливаются, вы можете начать нормально.


Дополнительная команда для поиска запущенных srrvices,

$ ps -ef
$ ps -ef | grep python

Ответ 13

За исключением процесса поиска решения, выполняющегося на: 80 и убей, затем снова запустите,

Эта ошибка может возникнуть, если в файле apache conf или в любых файлах .conf содержится несколько записей "Listen", включенных в файл apache conf. Надеюсь, это поможет кому-то..!!