Быстрый ответ - нет.
Программа 'apachectl' на самом деле является всего лишь сценарием оболочки, поэтому (поняв это) легко увидеть, что она делает, и почему она не выполняет то, что я ожидала.
При перезапуске Apache (изящно или иным образом) на Mac соответствующее задание launchctl просто выгружается и перезагружается, что, я думаю, не соответствует официальному описанию Apache изящного перезапуска:
Сигнал USR1 или изящный заставляет родительский процесс посоветовать детям выйти после их текущего запроса (или немедленно выйти, если они ничего не обслуживают)
Причина, по которой apachectl -S
не показывает настроенные виртуальные серверы, заключается в том, что эта команда не запускается launchctl, и поэтому переменные среды, заданные в /System/Library/LaunchDaemons/org.apache.httpd.plist, не загружаются .
Итак, apachectl graceful
, apachectl restart
и другие загружают правильные переменные и, следовательно, читают файлы конфигурации правильно, но не все команды делают по умолчанию.
Чтобы преодолеть это, я вручную отредактировал / usr / sbin / apachectl, как показано ниже. Все, что я сделал, это добавил "-D MACOSXSERVER -D WEBSERVICE_ON", где это уместно.
case $ARGV in
start)
run_launchctl load -w $LAUNCHD_JOB
ERROR=$?
;;
stop|graceful-stop)
run_launchctl unload -w $LAUNCHD_JOB
ERROR=$?
;;
restart|graceful)
run_launchctl unload -w $LAUNCHD_JOB 2> /dev/null
run_launchctl load -w $LAUNCHD_JOB
ERROR=$?
;;
startssl|sslstart|start-SSL)
echo The startssl option is no longer supported.
echo Please edit httpd.conf to include the SSL configuration settings
echo and then use "apachectl start".
ERROR=2
;;
configtest)
$HTTPD -t -D MACOSXSERVER -D WEBSERVICE_ON
ERROR=$?
;;
status|fullstatus)
echo Go to $STATUSURL in the web browser of your choice.
echo Note that mod_status must be enabled for this to work.
;;
*)
$HTTPD $ARGV -D MACOSXSERVER -D WEBSERVICE_ON
ERROR=$?
esac