apache2 не запускается на сервере Ubuntu 9.10 - почему?

Мой вопрос тройной:
1) как я могу выяснить, что на самом деле здесь произошло,
2) как я могу предотвратить это снова, и
3) я могу настроить Monit для обнаружения и перезапуска сервера, если это произойдет снова?

Вот что случилось:

Мой сервер apache2, размещенный на Ubuntu 9.10 RackSpace Cloud Server, не работал сегодня утром - и перезапуск не удался [да, я должен был сделать запуск вместо этого - но, поскольку перезапуск возвращается к началу работы, если нет остановленного сервера, он не должен не имеет значения] следующим образом:

user@host: sudo /etc/init.d/apache2 restart
* Restarting web server apache2                                                                                                                                                        
(13)Permission denied: make_sock: could not bind to address 0.0.0.0:80 
no listening sockets available, shutting down 
Unable to open logs

Гугл на помощь: я следую инструкциям в этом посте http://www.linuxquestions.org/questions/linux-newbie-8/could-not-bind-to-address-0-0-0-0-80-a-405377/

for i in `ps auwx | grep -i nobody | awk {'print $2'}`; do kill -9 $i; done

и начинается без ошибок. Итак, теперь я исправлен, но нужно знать больше.

редактировать: только что увидел это: Apache2 падает - надеюсь, это не то же самое.

редактировать: пока, все хорошо - проверка руткита становится чистой -

3 ответа

Решение

Я столкнулся с тремя случаями с различными сценариями инициализации.

user@host имеет права на отключение apache2, но apache работает на порте 80, который требует его запуска с правами root. Используйте sudo для перезапуска apache2. Пользователь @root должен иметь возможность перезагрузить apache2.

Если user@host может запустить apache2, то вы, вероятно, столкнулись с проблемой синхронизации, когда apache пытается запустить до выхода всех детей. Можно использовать перезагрузку, применив множество изменений конфигурации, и не требуется, чтобы старые дочерние элементы выходили до запуска новых серверов. Смотрите документацию для apachectl graceful,

Файл PID был изменен на другой PID при запуске start, когда сервер уже запущен. Остановить пытается остановить процесс из файла PID, но он больше не работает, потому что ему не удалось получить ресурсы, используемые старым процессом.

По проблеме

Полученная ошибка означает, что apache не может начать использовать порт 80, так как он используется другим приложением.

Теперь о вашем решении:

for i in `ps auwx | grep -i nobody | awk {'print $2'}`; do kill -9 $i; done

Команда смотрит на все запущенные процессы (ps auxw) и ищет элементы списка, которые содержат "никто" (grep -i nobody). -i Параметр гарантирует, что фильтр применяется без учета регистра.

awk {'print $2'} ограничивает вывод вторым столбцом.

И наконец do kill -9 $i убивает оставшиеся процессы с сигналом 9 (KILL)

Если вам нужно знать, что работает на порту

fuser 80/tcp

Это выплюнет pid(ы) приложений, работающих на порту

Другие вопросы по тегам