Ответ 1
Кажется, порт 80 уже сделан. Используйте другой порт или попробуйте netstat
(grep
результат, чтобы выбрать только строку со значением 80 в ней), ps
и kill
, чтобы узнать, какое приложение занимает порт и закрывает его.
Я получаю эту ошибку, когда пытаюсь запустить 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>
Что мне не хватает?
Кажется, порт 80 уже сделан. Используйте другой порт или попробуйте netstat
(grep
результат, чтобы выбрать только строку со значением 80 в ней), ps
и kill
, чтобы узнать, какое приложение занимает порт и закрывает его.
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.
Во всех случаях убийство процесса может не работать, поскольку процесс, использующий порт 80, перезапускается и не позволяет использовать порт. Итак, что можно сделать, это изменить порт для apache, если это не имеет значения.
Для этого нужно изменить две вещи:
Откройте /etc/apache2/ports.conf
с любым текстовым редактором и измените значение записи Listen 80
на нужный порт (например, Listen 8080
).
Измените запись для <virtualhost 80>
на тот же номер порта, который вы указали в файле /etc/apache2/ports.conf
, в /etc/apache2/sites/enabled/000-default
(например, <virtualhost 8080>
).
Убедитесь, что у вас нет команды Listen 80
в нескольких местах.
В моем случае я получал ту же ошибку, и причина в том, что эта команда была как в ports.conf, так и по сайтам с включенным/000-умолчанию.
В моем случае это был nginx (потому что у меня это на моем сервере).
sudo service nginx stop
sudo service apache2 start
sudo netstat -tulpn| grep :80
pkill
процесс (nginx?)
Отключить, какой виртуальный хост привязан к порту 80, который вы не хотите (nginx?). Это в /etc/nginx/sites -enabled или/etc/apache2/sites-enabled
sudo kill -9 -2321 (pid) Перезапустить BT Готово..... нет необходимости вносить изменения в conf. файл.
При перезапуске или запуске сервера через терминал вы можете забыть добавить sudo перед командой.
Используйте sudo /etc/init.d/apache2 reload
вместо /etc/init.d/apache2 reload
У меня была такая же проблема с совершенно другой причиной. Я запускаю 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 снова был счастлив.
Может быть, это помогает кому-то...
Я получил эту ошибку при новой установке 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 и надеяться на лучшее.
В моем случае я удалил файл 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
, удалите их по мере необходимости.
$ 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
За исключением процесса поиска решения, выполняющегося на: 80 и убей, затем снова запустите,
Эта ошибка может возникнуть, если в файле apache conf или в любых файлах .conf содержится несколько записей "Listen", включенных в файл apache conf. Надеюсь, это поможет кому-то..!!