MacOS Sierra:Apachectl使用/usr/local/etc/apache2/2.4而不是/etc/ap



我有/etc/apache2/中定义的所有配置文件和虚拟主机。

但是,当我运行apachectl -V时,我将获得以下输出:

Server version: Apache/2.4.26 (Unix)
Server built:   Jul  8 2017 19:15:17
Server's Module Magic Number: 20120211:68
Server loaded:  APR 1.6.2, APR-UTIL 1.6.0
Compiled using: APR 1.6.2, APR-UTIL 1.6.0
Architecture:   64-bit
Server MPM:     prefork
  threaded:     no
    forked:     yes (variable process count)
Server compiled with....
 -D APR_HAS_SENDFILE
 -D APR_HAS_MMAP
 -D APR_HAVE_IPV6 (IPv4-mapped addresses enabled)
 -D APR_USE_SYSVSEM_SERIALIZE
 -D APR_USE_PTHREAD_SERIALIZE
 -D SINGLE_LISTEN_UNSERIALIZED_ACCEPT
 -D APR_HAS_OTHER_CHILD
 -D AP_HAVE_RELIABLE_PIPED_LOGS
 -D DYNAMIC_MODULE_LIMIT=256
 -D HTTPD_ROOT="/usr/local/Cellar/httpd24/2.4.26"
 -D SUEXEC_BIN="/usr/local/Cellar/httpd24/2.4.26/bin/suexec"
 -D DEFAULT_PIDLOG="/usr/local/var/run/apache2/httpd.pid"
 -D DEFAULT_SCOREBOARD="logs/apache_runtime_status"
 -D DEFAULT_ERRORLOG="logs/error_log"
 -D AP_TYPES_CONFIG_FILE="/usr/local/etc/apache2/2.4/mime.types"
 -D SERVER_CONFIG_FILE="/usr/local/etc/apache2/2.4/httpd.conf"

这显然使用了我甚至不知道存在的其他一些Apache2配置文件。如何强制Apache2使用适当的配置文件?

您可能已经在计算机上安装了Apache,然后安装了另一个版本。在这种情况下,您可能有多个Apachectl二进制文件。不同的Apachectl二进制文件将被编译为与不同的配置文件一起使用。

做:

find /usr -name apachectl

这将查找/usr 目录中的所有内容, name apachectl 。我的输出是:

/usr/local/bin/apachectl
/usr/local/Cellar/httpd/2.4.27/bin/apachectl
/usr/sbin/apachectl

现在,使用-v查看每个可执行文件的信息,直到找到所需的配置文件编译的版本:

    /usr/sbin/apachectl -V

out:

    ...
    ...
    ...
    -D SERVER_CONFIG_FILE="/private/etc/apache2/httpd.conf"

现在,我们知道您想拥有哪个优先级。这就是您设置优先级的方式。

即使有多个具有相同名称的二进制文件,当您在终端上键入" Apachectl"时,也没有"战斗"来确定执行哪一个,因为优先级是由:

确定的。
  1. /etc/path文件
  2. 您的bash配置文件

您有一些选择:

a)(不建议)您可以更改/etc/path文件,以反映您希望Apachectl的一种版本以优先于另一个

路径文件用于整个文件层次结构的一般优先级。您会告诉它,"通常,当有多个具有相同名称的二进制文件时,请在此目录层次结构中执行第一个" "。因此,文件非常简单,只是目录的订购。我的看起来像这样:

/usr/local/bin
/usr/bin
/bin
/usr/sbin
/sbin

我不会更改路径文件,因为这有点像通过撕下整个指甲来摆脱挂牌。

b)您可以通过将其键入您的终端来更改优先级(单个终端会话):

export PATH="/usr/sbin/apachectl:$PATH"

这将导出一个新的 PATH 带有/usr/sbin/sbin/apachectl 变量。这将为您的可执行操作的路径预期到路径的开头,从而使其优先于其他所有可能的可执行文件。因此,当您的系统从终端接到Apachectl二进制文件时,它会检查路径并停止检查何时遇到直接路径,直接通往您的可执行文件作为路径中的第一件事。这不会超越一次会话。因此,如果您关闭终端,则路径将恢复到它。

c)您可以通过将上一个导出命令添加到您的〜/.bashrc文件(或Mac上的〜/.bash_profile)来永久性:

export PATH="/usr/sbin/apachectl:$PATH"

在.bashrc文件中将其每次开始新会话时都会导致此语句执行,因为那是读取您的个人资料时。

如果您的个人资料中有另一行,故意给出了Apachectl优先级的其他版本,则可以删除它,或者只需确保您的导出...在文件中添加之后。

d)您可以做一个别名,直接参考此可执行文件。

一个别名是您可以用来参考位于特定位置的可执行文件的单词。每次输入别名时,您都会在该确切的位置指代精确的可执行文件。我建议您高于其他所有:

alias apachectl_a1='/usr/sbin/apachectl'

也需要将其放入您的〜/.bashrc文件(Mac上的〜/.bash_profile)以持续到一个会话。

相关内容

最新更新