Ошибка 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.

у меня есть это в моих портах.conf

NameVirtualHost *:80
Listen 80

Это мой файл vhost

<VirtualHost *:80>
          ServerAdmin example@example.com
          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>

что я упустил?

14 ответов


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


netstat -ltnp | grep :80

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

tcp6 0 0 :::80 :::* слушайте 1047 / apache2

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

sudo kill -9 1047

(1047 - pid нет)

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

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

sudo service apache2 restart

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


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

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

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

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


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

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


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

sudo service nginx stop
sudo service apache2 start

sudo netstat -tulpn| grep :80

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

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


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


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

использовать sudo /etc/init.d/apache2 reload вместо /etc/init.d/apache2 reload


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

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

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

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

возможно, это кому-то помогает...


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

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

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

el@titan:~$ 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]

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

el@titan:~$ 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. Странный. Эта воля подтвердите:

el@titan:~$ 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 не работает:

el@titan:~$ sudo service apache2 status
Apache2 is NOT running.

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

root@titan:~# /usr/sbin/apache2ctl status
**hangs until Ctrl-C is pressed.

таким образом, Ubuntu, похоже,испытывает проблемы с управлением apache2 при загрузке. Пора прекращать помощью apache2:

root@titan:~# /usr/sbin/apache2ctl stop
httpd (no pid file) not running

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

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

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

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

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

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

так что иди посмотри на это /etc/rc2.d/S91apache2.

el@titan:/etc/rc2.d$ ls -l
lrwxrwxrwx   1 root root    17 Nov  7 21:45 S91apache2 -> ../init.d/apache2*

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

root@titan:~# 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 таким, каким он был, но это заставит его снова потерпеть неудачу.

root@titan:~$ 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 и надеяться на лучшее.


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

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

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


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

$ 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
jpa@jpa-dell:~/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

кроме решения найти процесс работает на: 80 и убить, а затем начать снова,

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


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

sudo killall httpd

проверьте, что любая служба использует 80 still

sudo netstat -tulpn| grep :80

и перезапустите сервер

sudo service httpd start

enter image description here