2012-04-02 10 views
3

최근에 Mac OS를 Lion에서 Lion Server로 업그레이드했는데, Apache가 시작될 때 httpd.conf 설정을 읽는 방법이 변경됩니다. 특히, WEBSHARING_ON 및 MACOSXSERVER와 같은 환경 변수는 Server.app 프로세스에 의해 설정되므로 Apache가 시작될 때 추가 모듈 및 파일이 읽혀집니다. 그래서 지금Lion Server에서 Apache를 정상적으로 다시 시작합니다.

이 모든 적절한 설정 및로드 모듈을 아파치 서버를 다시 시작, 내가 명령을 사용해야합니다 : - 이전

sudo serveradmin stop web && sudo serveradmin start web 

를, 내가 실행됩니다 : -

sudo apachectl -S 
sudo apachectl graceful 

나는 후자의 방법을 훨씬 선호한다. 한 가지는 명령이 훨씬 빨리 돌아오고 apache/httpd 서버 프로세스가 완전히 종료되지 않고 설정이 다시로드된다고 상상해보십시오.

따라서 라이온 서버에서 정상적으로 Apache를 다시 시작하는 방법이 있습니까?

답변

2

빠른 대답은 없습니다.
'apachectl'프로그램은 실제로 쉘 스크립트 일 뿐이므로 (이 사실을 알게 된 후) 실제로 무엇을하고 있는지, 그리고 내가 예상 한대로하지 않는 이유를 쉽게 알 수 있습니다.

Mac에서 아파치를 (정상적으로 또는 기타) 다시 시작하는 경우, 관련 launchctl 작업이 단지 언로드 나는 우아한 재시작의 official Apache description 따라하지 상상하는, 다시로드 :

USR1 또는 우아한 신호는 현재 요청 이후 출구 아이들을 조언 (혹은 현재 아무것도 처리하지 않는 경우 즉시 종료)이 명령이기 때문에

구성된 가상 서버를 표시하지 않는 이유 apachectl -S는 부모 프로세스가 발생합니다 launchctl에 의해 실행되지 않기 때문에 envir /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 
관련 문제