четверг, 26 апреля 2012 г.

httpd: (98)Address already in use: make_sock: could not bind to address

Сегодня при попытке перезапустить апач на одном из серверов на CentOS 6.2, получил сообщение:
# /etc/init.d/httpd restart
Останавливается httpd:                                  [СБОЙ ]
Запускается httpd: (98)Address already in use: make_sock: could not bind to address 1.1.1.1:443
no listening sockets available, shutting down
Unable to open logs
                                                        [СБОЙ ]

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


Для начала я убил апача (команда stop выдавала точно такую же ошибку) и убедился, что 443 порт свободен:
# pkill -9 httpd
# pgrep -fl httpd
# lsof -i :443
После убийства апача, он нормально стартовал. Но stop или restart все равно не работали.

После чего перерыл конфиги апача, но не нашел к чему придраться. Так же сам апач говорил, что с его конфигами все ОК:
# /etc/init.d/httpd configtest
Syntax OK
или
# apachectl configtest
Syntax OK

Далее решил на всякий случай заглянуть в /etc/init.d/httpd. Команда stop там реализуется таким кодом:
# ...
. /etc/rc.d/init.d/functions
# ...
stop() {
        echo -n $"Stopping $prog: "
        killproc -p ${pidfile} -d ${STOP_TIMEOUT} $httpd
        RETVAL=$?
        echo
        [ $RETVAL = 0 ] && rm -f ${lockfile} ${pidfile}
}
Функция killproc находится в файле /etc/rc.d/init.d/functions, который "инклюдится" в /etc/init.d/httpd. Я и подумал: "А дай-ка попробую killproc ручками вызвать":
# bash -c '. /etc/rc.d/init.d/functions; killproc -p /var/run/httpd.pid -d 10 httpd'
#                                             [  OK  ]
Опа, пишет "[ OK ]" :)

Проверяю:
# /etc/init.d/httpd start
Запускается httpd:                                      [  OK  ]

# /etc/init.d/httpd stop
Останавливается httpd:                                  [  OK  ]

# /etc/init.d/httpd restart
Останавливается httpd:                                  [  OK  ]
Запускается httpd:                                      [  OK  ]
Все работает! Урааа!!! :)

PS: Но я так и не понял, что это было и из-за чего %)





Информация с сайта http://blog.angel2s2.ru/.

6 комментариев:

  1. такая же лажа, при stop и restart выдает ошибку и апач продолжает работать. configtest и старт проходят без ошибок, можно только убить httpd.

    ваше решение не помогло , в /etc/init.d/httpd остановка командой проходит:
    /usr/local/apache/bin/httpd -k stop

    у меня выдает:
    #/usr/local/apache/bin/httpd -e debug -k stop
    [Tue May 15 23:36:43 2012] [warn] NameVirtualHost *:80 has no VirtualHosts
    (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

    очень странно, уже кажется все перерыл, не ясно чего не хватает. Случилось после пересборки с помощь easyapache(Cpanel) apache + mpm-itk

    все работает, вот только не ребутится правильно и не стопается

    ОтветитьУдалить
  2. и поставьте модуль какой-то чтобы можно было подписаться на новые комментарии на странице ;-)

    ОтветитьУдалить
  3. А какой у вас дистрибутив?
    Можете залить, куда-нибудь свой /etc/init.d/httpd?


    Подписать на комментарии можно:
    1. Сразу под полем ввода комментария есть ссылка "Подписаться по электронной почте"
    2. Внизу страницы есть ссылка для RSS: "Подписаться на: Комментарии к сообщению (Atom)"

    ОтветитьУдалить
  4. Кстати, если у вас несколько интерфейсов, попробуйте в конфиге апаче заменить
    Listen *:80
    на конкретный интерфейс, например
    Listen 1.1.1.1:80

    ОтветитьУдалить
  5. Така же байда после установки mpm-itk

    ОтветитьУдалить
  6. То же самое случилось после настройки SMTP-AUTH с TLS на Exim4, Ubuntu Server.
    Автору спасибо, апач заработал!

    ОтветитьУдалить