2012-04-02 11 views
3

Ich habe vor kurzem mein Mac OS von Lion auf Lion Server aktualisiert, die ändert, wie die httpd.conf Einstellungen gelesen werden, wenn Apache gestartet wird. Insbesondere werden Umgebungsvariablen wie WEBSHARING_ON und MACOSXSERVER durch den Prozess Server.app gesetzt, so dass zusätzliche Module und Dateien beim Start von Apache eingelesen werden.Graceful Neustart von Apache auf Lion Server

So, jetzt den Apache-Server mit allen richtigen Einstellungen und Module geladen neu zu starten, ich habe den Befehl verwenden: -

sudo serveradmin stop web && sudo serveradmin start web 

Früher hätte ich laufen: -

sudo apachectl -S 
sudo apachectl graceful 

Ich bevorzuge die letztere Methode bei weitem. Zum einen kommt der Befehl viel schneller zurück, und ich stelle mir auch vor, dass der Apache/httpd-Serverprozess nicht vollständig beendet wird, sondern nur die Einstellungen neu geladen werden.

Gibt es also eine Möglichkeit, Apache in Lion Server elegant neu zu starten?

Antwort

2

Die schnelle Antwort ist nein.
Das Programm 'apachectl' ist eigentlich nur ein Shell-Skript, also ist es (nach der Erkenntnis) leicht zu sehen, was es macht und warum es nicht das tut, was ich erwartet habe.

Wenn Apache (ordnungsgemäß oder nicht) auf einem Mac neu zu starten, wird der entsprechende launchctl Job gerade entladen und neu geladen, die ich mir nicht vorstellen, wie pro die official Apache description eines anmutigen Neustart:

The USR1 oder anmutige Signal veranlasst den Elternprozess, die Kinder zu verlassen, nachdem ihre aktuellen Anfrage zu beraten (oder sofort zu verlassen, wenn sie nicht alles dient)

Der Grund apachectl -S nicht die konfigurierten virtuellen Server nicht zeigen, weil dieser Befehl nicht von launchctl ausgeführt, und so die Umgebung Die in /System/Library/LaunchDaemons/org.apache.httpd.plist eingestellten ONVENT-Variablen werden nicht geladen.

Also, apachectl graceful, und andere laden die richtigen Variablen, und lesen Sie daher die Konfigurationsdateien richtig, aber nicht alle Befehle tun standardmäßig.

Um dies zu überwinden, habe ich/usr/sbin/apachectl wie folgt manuell bearbeitet. Alles, was ich getan habe, war "-D MACOSXSERVER -D WEBSERVICE_ON" wo nötig hinzuzufügen.

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 
Verwandte Themen