2012-04-02 3 views
3

Недавно я обновил ОС Mac от Lion до Lion Server, что изменяет настройки параметров httpd.conf при запуске Apache. В частности, переменные окружения, такие как WEBSHARING_ON и MACOSXSERVER, устанавливаются процессом Server.app, так что дополнительные модули и файлы считываются при запуске Apache.Изящный перезапуск Apache на сервере Lion

Так что теперь, чтобы перезапустить сервер Apache со всеми соответствующими настройками и загруженных модулей, я должен использовать команду: -

sudo serveradmin stop web && sudo serveradmin start web 

Раньше я бы работать: -

sudo apachectl -S 
sudo apachectl graceful 

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

Итак, есть ли способ изящно перезапустить Apache в Lion Server?

ответ

2

Быстрый ответ: нет.
Программа «apachectl» на самом деле всего лишь сценарий оболочки, поэтому (после реализации этого) легко понять, что она делает, и почему она не делает то, что я ожидал.

При перезапуске Apache (грациозно или иным образом) на Mac, соответствующая launchctl работа только разгружается и перезагружается, который я представляю, не согласно official Apache description изящного рестарта:

The usr1 или изящный сигнал вызывает родительский процесс консультирования детей к выходу после их текущего запроса (или выйти немедленно, если они ничего не служат)

причина apachectl -S не показывает сконфигурированные виртуальные серверы, потому что эта команда не запускается startctl, и поэтому среда переменные включения, установленные в /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 
Смежные вопросы