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

apache2 не запущен, но прослушивает порт 80

Я сделал образ одного из моих личных образов Amazon EC2, на котором работает один веб-сайт, а затем начал установку Redmine. После того, как установка будет завершена, произойдет перезапуск Apache. Я столкнулся со следующей проблемой (извините, вам, возможно, придется увеличить масштаб, чтобы увидеть снимок экрана):

Насколько я понимаю, apache2 не запущен, но прослушивает порт 80. Затем я попробовал: что дает тот же сбивающий с толку, но непротиворечивый вывод: apache2 не работает, но я уверен, что это процесс 18304, который apache2 прослушивает порт 80. В конце концов мне пришлось убить процесс и перезапустить apache, который работал. Может ли кто-нибудь объяснить мне, что могло вызвать это и исправить?

Обновление1:

Следующий синтезатор предложение использовать lsof. Это точно такая же проблема с другим процессом, что и раньше.

Иногда, когда вы останавливаете apache (или любую другую программу), скрипт не может должным образом завершить работу программы, потому что он чего-то ждет (например, ввода-вывода), но удаляет файл pid. Таким образом, сценарий полагает, что apache не запущен, потому что нет файла pid, но apache запущен, или иногда не совсем запущен, а застревает и сидит на порту.

В этих случаях вам нужно остановить процесс, и вы можете запустить программу. Я видел много таких зависших процессов из apache, slapd, cirus, ... иногда такое случается.

Бегать

ps aux|grep apache

Ты видишь

/usr/share/apache2/ask-for-passphrase localhost:443 RSA

Если так

Один из сайтов содержит сертификат SSL с парольной фразой. Поэтому, когда apache пытался запустить во время загрузки, он не мог продолжить работу без ввода пароля вручную.

Итак, у вас есть два варианта решения этой проблемы:

  1. Добавить SSLPassPhraseDialog директиву вашей config.

  2. Удалите кодовую фразу (Менее безопасно)

Как сказано выше на плакате, используйте

lsof -n | grep TCP

или

lsof -n | grep "*:www"

Кроме того, в Ubuntu он использует имя процесса «apache2», поэтому вы должны проверять его с помощью

ps -ax |grep apache

Вместо grep httpd

Попробуйте бежать

lsof -n | grep TCP 

Кроме того ... контроллер apache2 не всегда самый надежный, он просто проверяет PID-файл, а не сам процесс.

ps -aef | grep httpd

$ 1 говорит, что у вас все еще запущен httpd.