3

最近、MacのOSをLionからLion Serverにアップグレードしました。これにより、Apacheの起動時にhttpd.conf設定が読み取られる方法が変更されます。特に、WEBSHARING_ONやMACOSXSERVERなどの環境変数はServer.appプロセスによって設定されるため、Apacheの起動時に追加のモジュールとファイルが読み込まれます。

したがって、適切な設定とモジュールをすべてロードしてApacheサーバーを再起動するには、次のコマンドを使用する必要があります。

sudo serveradmin stop web && sudo serveradmin start web

以前は、次のように実行していました:-

sudo apachectl -S
sudo apachectl graceful

私は後者の方法をはるかに好みます。一つには、コマンドがはるかに速く返されます。また、apache / httpdサーバープロセスが完全に終了するのではなく、設定が再ロードされるだけだと思います。

では、Lion ServerでApacheを正常に再起動する方法はありますか?

4

1 に答える 1

2

簡単な答えはノーです。
'apachectl'プログラムは実際には単なるシェルスクリプトであるため、(これを認識した後)それが何をしているのか、そしてなぜそれが私が期待したことをしていないのかを簡単に確認できます。

MacでApacheを(正常にまたはその他の方法で)再起動すると、関連するlaunchctlジョブがアンロードされて再ロードされます。これは、Apacheの正式な再起動の説明とは異なると思います。

USR1またはグレースフルシグナルにより、親プロセスは、現在の要求の後に終了するように(または、何も提供していない場合はすぐに終了するように)子にアドバイスします。

apachectl -S構成された仮想サーバーが表示されない理由は、このコマンドがlaunchctlによって実行されないため、/ System / Library / LaunchDaemons/org.apache.httpd.plistに設定されている環境変数がロードされないためです。

したがって、、apachectl gracefulおよびapachectl restartその他は適切な変数をロードするため、構成ファイルを適切に読み取りますが、デフォルトですべてのコマンドがロードするわけではありません。

これを克服するために、以下のように/ usr / sbin/apachectlを手動で編集しました。必要に応じて「-DMACOSXSERVER-DWEBSERVICE_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
于 2012-07-16T14:03:44.397 に答える