XAMPP не запускает Apache в Mac OS X 10.6.8 Snow Leopard
Когда я пытаюсь запустить Apache с панели управления XAMPP (Mac OS X 10.6.8 Snow Leopard), я получаю следующее сообщение об ошибке, и Apache не запускается:
/Applications/XAMPP/xamppfiles/bin/apachectl: line 70: ulimit: open files: cannot modify limit: Invalid argument
(48)Address already in use: make_sock: could not bind to address [::]:80
XAMPP работал отлично на 10 минут раньше. Я остановил Apache, чтобы добавить некоторые .conf
файлы и не удалось перезапустить. Я удалил все новое .conf
файлы (т.е. вернул его к тому, что было раньше), но теперь я получаю сообщение выше.
Я проверил AppMonitor и вижу httpd
процессы (один за _www
вложенный в корень). Просто попытался выйти из этого, но они автоматически перезапускаются на новых идентификаторах процесса, и это не решило проблему.
И я попробовал полную перезагрузку, и я все еще получаю ту же ошибку (перед запуском любых приложений). Буду признателен, если у кого-то есть идея, как это решить.
3 ответа
Жалуется на порт 80
уже используется. В подобных сценариях это обычно вызывается тем, что Apache уже (или все еще) работает.
Как вы уже заметили, еще есть httpd
процесс запущен. Обязательно сначала закройте все процессы Apache HTTPD, а затем снова запустите его.
Это отключит httpd.
sudo launchctl unload -w /System/Library/LaunchDaemon/org.apache.httpd.plist
Есть две вещи, которые могут быть причиной проблемы: активная встроенная в Apple служба совместного использования веб-сайтов или все еще активные процессы зомби XAMPP.
Если это вызвано совместным использованием веб-страниц Apple, вы можете справиться с этим, перейдя в System Preferences…
а затем выбрав Sharing
, Оказавшись там, снимите флажок Web Sharing
- который в основном просто Apache httpd
- и ваша проблема должна быть решена.
Тем не менее, если это в основном "зомби" экземпляр Apache, запущенный после некоторых настроек XAMPP, лучше всего сделать что-то вроде следующего:
Первый забег lsof
(список открытых файлов), в котором перечислены все файлы, активно открытые в системе.
sudo lsof | grep MAMP | grep apache
Обратите внимание на два grep
команды передаются вместе? Что я делаю, так это получаю список открытых файлов, затем фильтрую те, у которых есть путь к файлу, связанный с MAMP - или, в вашем случае, меняю его на XAMPP или любую папку / каталог, в котором он запущен, - и я фильтрую apache
в пути. Список должен выглядеть примерно так:
httpd 2204 jake 2w REG 1,2 24685 17953784 /Applications/MAMP/logs/apache_error.log
httpd 2211 jake 2w REG 1,2 24685 17953784 /Applications/MAMP/logs/apache_error.log
httpd 2212 jake 2w REG 1,2 24685 17953784 /Applications/MAMP/logs/apache_error.log
httpd 2213 jake 2w REG 1,2 24685 17953784 /Applications/MAMP/logs/apache_error.log
httpd 2214 jake 2w REG 1,2 24685 17953784 /Applications/MAMP/logs/apache_error.log
httpd 2215 jake 2w REG 1,2 24685 17953784 /Applications/MAMP/logs/apache_error.log
httpd 2216 jake 2w REG 1,2 24685 17953784 /Applications/MAMP/logs/apache_error.log
Хорошо, это целый список процессов. Apache использует концепцию наличия одного родительского процесса с множеством дочерних процессов, порожденных для обработки трафика. Поэтому, если вы убьете дочерний процесс, родительский процесс заметит его и возродит нового дочернего процесса.
Теперь, посмотрев на этот список, обычно наименьшее число в этом списке процессов будет родительским (поскольку он запускается раньше, чем другой дочерний процесс, разумеется), поэтому вы должны убить его, чтобы уничтожить все процессы. Таким образом, в этом случае процесс с наименьшим номером в списке 2204
, так что просто запустите эту команду:
kill 2204
И тогда родительский процесс уничтожается, и все дочерние процессы также должны удаляться. Тогда порт 80
должен быть доступен снова.