Это мое первое указание на проблему:
$ sudo /sbin/service httpd restart
Stopping httpd: [FAILED]
Starting httpd: no listening sockets available, shutting down
Unable to open logs
[FAILED]
Я знаю, что httpd работает
$ ps -ef | grep httpd | grep -v grep
apache 9619 20181 0 07:08 ? 00:00:03 /usr/sbin/httpd
apache 10092 20181 0 Jan24 ? 00:00:07 /usr/sbin/httpd
apache 13086 20181 0 06:09 ? 00:00:00 /usr/sbin/httpd
apache 13717 20181 0 Jan25 ? 00:00:01 /usr/sbin/httpd
apache 14730 20181 0 07:13 ? 00:00:01 /usr/sbin/httpd
apache 16359 20181 0 09:54 ? 00:00:00 /usr/sbin/httpd
root 20181 1 0 2011 ? 00:00:01 /usr/sbin/httpd
apache 21450 20181 0 09:55 ? 00:00:00 /usr/sbin/httpd
и использует порты 80 и 443
$ sudo netstat -lnp | grep :80
tcp 0 0 :::80 :::* LISTEN 9619/httpd
$ sudo netstat -lnp | grep :443
tcp 0 0 :::443 :::* LISTEN 9619/httpd
, поэтому я предполагаю, что получаю сообщение «нет доступных сокетов для прослушивания», потому что httpd не может остановиться, чтобы освободить порты 80 и 443.
Я использую RHEL версии 5.7:
$ cat /etc/redhat-release
Red Hat Enterprise Linux Server release 5.7 (Tikanga)
Я вижу кучу процессы, запущенные для httpd:
$ pgrep httpd
9619
10092
13086
13717
14730
16359
20181
21450
Что может помешать остановке httpd? Если я убью процессы для httpd, смогу ли я запустить httpd без проблем?
Функция остановки в /etc/init.d/httpd использует pid-файл:
killproc -p ${pidfile} -d ${STOP_TIMEOUT} $httpd
Возможно, pid-файл /var/run/httpd.pid
находится вне дата или отсутствует (могли ли вы запустить httpd в прошлом без использования сценария /etc/init.d
или службы
?). Вы можете проверить этот файл (и его содержимое) с помощью ps -ef | grep http
.
Да, просто sudo kill 20181
. Затем запустите службу, как обычно. Затем попробуйте перезапустить после этого.
Если это произойдет снова, вам, вероятно, следует выяснить, почему файл pid не работает с таблицей процессов.
Вы должны быть может убить процессы HTTP - текущие соединения, конечно, будут прерваны, и если кто-то в данный момент отправляет вам данные (например, отправляет форму), они могут быть потеряны. Но в целом да, это нормально. То же самое произойдет и с перезапуском httpd службы
. Возможно, вам придется очистить файл блокировки в / var / lock / subsys / httpd (удалить этот файл).
Затем я бы запустил service httpd configtest
, чтобы убедиться, что ваша конфигурация apache хотя бы загружается. Затем попробуйте запустить его с помощью service httpd start
Вы правы в том, что ошибки, связанные с используемыми портами, связаны с тем, что httpd все еще работает, и поэтому вы используете эти порты. Точно так же и ошибка журнала.
И еще одно - нет необходимости запускать sudo
, чтобы использовать ps
или netstat
. Возьмите за правило использовать sudo
только для тех вещей, для которых это необходимо. Это избавит вас от неприятностей позже, когда вы избежите выполнения деструктивной команды с привилегиями root, когда вы этого не хотите.
sudo
, чтобы использовать ps
или netstat
. Возьмите за правило использовать sudo
только для тех вещей, для которых это необходимо. Это избавит вас от неприятностей позже, когда вы избежите выполнения деструктивной команды с привилегиями root, когда вы этого не хотите. s нет необходимости запускать sudo
, чтобы использовать ps
или netstat
. Возьмите за правило использовать sudo
только для тех вещей, для которых это необходимо. Это избавит вас от неприятностей позже, когда вы избежите выполнения деструктивной команды с привилегиями root, когда вы этого не хотите. Выполните аналогичные попытки на centos6 с ispconfig3 и Apache. Сообщение cjc помогло мне найти ответ на мой. (спасибо!) Оказывается, путь PID в /etc/httpd/conf/httpd.conf по какой-то причине отличается от пути в /etc/init.d/httpd. Как только я сделал их такими же (я решил отредактировать httpd.conf, оставив только сценарий init.d), затем убил httpd, используя PID, указанный в ps -ef, затем снова запустил httpd с помощью /etc/init.d/httpd start & voila, он работает как должно. service httpd status / stop / restart / start теперь все работает, как ожидалось.
Я подозреваю, что файл http.conf, возможно, был заменен из резервной копии centos5 или, возможно, он был отредактирован в какой-то момент, если по умолчанию не было неправильных, хотя это кажется маловероятным .
/etc/httpd/conf/httpd.conf
Before:
PidFile run/httpd.pid
After:
PidFile run/httpd/httpd.pid
/etc/init.d/httpd дал намек на то, что это должно было быть:
# pidfile: /var/run/httpd/httpd.pid
В моем статусе было указано «Остановлено», хотя в ps явно было показано, что httpd работает. stop выдал ошибку, start выдал порты, которые уже используются. Оглядываясь назад, сейчас это имеет смысл, но я хотел опубликовать это, если кто-то еще столкнется с тем же. stop также давал httpd мертв, но иногда subys блокировался.
Пример ошибки, которую я получал:
Stopping httpd: [FAILED]
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