У меня тройной вопрос:
1) как я могу понять, что здесь произошло на самом деле,
2) как сделать так, чтобы это не повторилось, и
3) могу ли я настроить Monit для обнаружения и перезапуска сервера, если это произойдет снова?
Вот что произошло:
Мой сервер apache2, размещенный на сервере RackSpace Cloud Server Ubuntu 9.10, сегодня утром не работал - и перезапуск не удался [да, я должен был сделать запуск вместо этого - но поскольку перезапуск возвращается к началу, если нет сервера, который нужно остановить, это не должно не имеет значения] следующим образом:
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
Google спешит на помощь: я следую инструкциям в этом посте http://www.linuxquestions.org/questions/linux-newbie-8/could-not-bind-to-address-0-0-0-0-80-a-405377/#post3516504
for i in `ps auwx | grep -i nobody | awk {'print $2'}`; do kill -9 $i; done
и запускается без ошибок. Итак, теперь я исправлен, но мне нужно знать больше.
редактировать: только что увидел это: Apache2 падает - надеюсь, это не то же самое.
изменить: пока все хорошо - проверка руткитов оказывается чистой -
Полученная вами ошибка означает, что 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 приложений, работающих на порту.
Я столкнулся с тремя случаями с различными сценариями инициализации.
user @ host имеет право выключить apache2, но apache работает на порту 80, что требует его запуска от root. Используйте sudo для перезапуска apache2. Пользователь @ root должен иметь возможность перезагрузить apache2.
Если user @ host может запустить apache2, то вы, вероятно, столкнулись с проблемой синхронизации, когда apache пытается запуститься до того, как все дочерние элементы выйдут. Перезагрузка может использоваться для применения многих изменений конфигурации и не требует выхода старых дочерних серверов до запуска новых серверов. Документацию для apachectl graceful
.
Файл PID был изменен на другой PID путем запуска, когда сервер уже запущен. Stop пытается остановить процесс из файла PID, но он больше не работает, потому что ему не удалось получить ресурсы, используемые старым процессом.