在Lion Server上正常重启Apache

时间:2012-04-02 11:25:45

标签: apache osx-lion osx-server

我最近将Mac的操作系统从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?

1 个答案:

答案 0 :(得分:2)

快速回答是否。
'apachectl'程序实际上只是一个shell脚本,所以(在意识到这一点之后)很容易看出它在做什么,以及为什么它没有按照我的预期进行。

在Mac上重启Apache(优雅或其他方式)时,相关的launchctl作业只是卸载并重新加载,我想这不是按照正常重启的official Apache description进行的:

  

USR1或优美信号导致父进程建议孩子在他们当前请求后退出(或者如果他们没有提供任何东西则立即退出)

apachectl -S未显示已配置的虚拟服务器的原因是因为此命令不是由launchctl运行的,因此/System/Library/LaunchDaemons/org.apache.httpd.plist中设置的环境变量是没装。

因此,apachectl gracefulapachectl 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