Назад | Перейти на главную страницу

Не удается запустить Apache - адрес уже используется - httpd остановлен

Я пытаюсь настроить веб-сервер Amazon EC2 в «виртуальном частном облаке». Я использую его вместо стандартного экземпляра EC2, потому что мне нужно было назначить несколько общедоступных IP-адресов, а это требует использования VPC.

В любом случае, после долгих прыжков я наконец-то запустил и подключил экземпляр через SSH. Я создал экземпляр из изображения стандартного веб-сервера, которое работает нормально. Однако, похоже, я не могу запустить Apache:

# service httpd status
httpd is stopped
# service httpd start
Starting httpd: (98)Address already in use: make_sock: could not bind to address [::]:80
(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
                                                           [FAILED]
# netstat -ltnp
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:22                  0.0.0.0:*                   LISTEN      1243/sshd
tcp        0      0 127.0.0.1:25                0.0.0.0:*                   LISTEN      1275/sendmail
tcp        0      0 0.0.0.0:9306                0.0.0.0:*                   LISTEN      1225/searchd
tcp        0      0 0.0.0.0:9312                0.0.0.0:*                   LISTEN      1225/searchd
tcp        0      0 :::80                       :::*                        LISTEN      1289/httpd
tcp        0      0 :::22                       :::*                        LISTEN      1243/sshd
tcp        0      0 :::443                      :::*                        LISTEN      1289/httpd
# ps aux | grep httpd
root      1287  0.0  0.2 108476  1780 ?        S    21:17   0:00 /bin/bash /etc/rc3.d/S85httpd start
root      1288  0.0  0.2  11348  1332 ?        S    21:17   0:00 /bin/bash -c ulimit -S -c 0 >/dev/null 2>&1 ; /usr/sbin/httpd
root      1289  0.0  1.2 211888  7764 ?        S    21:17   0:00 /usr/sbin/httpd

Так что я немного запутался. Apache не работает (как служба, и я не настраивал ее для запуска другими способами), и я не могу запустить службу, но разве это не говорит о том, что Apache IS работает? Есть идеи, как решить?

Добавлено 04 дек.2012

Apache установлен и настроен на автоматический запуск при загрузке с chkconfig --levels 235 httpd on, поэтому процесс httpd запускается при загрузке. Однако когда вы входите service httpd status он все еще читал как остановленный и был недоступен через веб-браузер.

Чтобы действительно перезапустить Apache, похоже, вам нужно изящно убить процесс (kill -15 1289 работает, где 1289 был идентификатором процесса), а затем введите service httpd start. Теперь вы можете без проблем запускать, останавливать, перезапускать и перезагружать Apache.

Однако я хотел иметь возможность сразу же использовать служебную команду, и дальнейшие поиски привели меня к выводу, который никто не мог реально представить: для одного из ключей SSL требуется кодовая фраза, и ее нельзя было ввести при загрузке ( ясно), поэтому процесс не мог запуститься должным образом. Я удалил кодовую фразу (которая нам в любом случае не нужна) и перезагрузился. Теперь, когда я проверяю service httpd status я получил httpd dead but subsys locked. Я должен удалить /var/lock/subsys/httpd чтобы процесс снова начался правильно.

Итак, это было похоже на прогресс, но процесс по-прежнему не запускается автоматически.

Идеи, пожалуйста?

tcp 0 0 ::: 80 ::: * СЛУШАТЬ 1289 / httpd

Httpd запущен и имеет идентификатор процесса 1289. Если по какой-то необычной причине это не Apache, а что-то еще с именем httpd, то вы можете найти дополнительную информацию с помощью такой команды, как lsof -n -p 1289.

Вы могли бы просто kill хотя этот процесс.

Я бы сказал, что apache IS запущен, и вы можете увидеть это на дисплее .... netstat указывает, что процесс 1289 прослушивает порт 80, и действительно, ps тоже показывает это. httpd - это apache!

Таким образом, вы, вероятно, можете просто убить -9 1289 (как root), а затем перезапустить.