【问题标题】:Clean reinstall and fix of httpd service error on macos清理重装并修复 macos 上的 httpd 服务错误
【发布时间】:2021-01-10 11:04:45
【问题描述】:

在 BigSur 上更新我的 MacO 后,我在使用 httpd(又名 Apache2)时仍然遇到一些问题。

我尝试使用 brew httpd 服务重新安装 apache2(就像很多教程中所说的那样),但它仍然无法正常工作。我总结了所采取的步骤,并添加了一些调试命令。

重新安装我完成了:

sudo apachectl stop
sudo launchctl unload -w /System/Library/LaunchDaemons/org.apache.httpd.plist 2>/dev/null

brew install httpd

之后我重新启动并启动了命令:

brew services start httpd
==> Successfully started `httpd` (label: homebrew.mxcl.httpd)

但是如果我运行以下命令:

brew services list
Name              Status  User            Plist
dnsmasq           started root            /Library/LaunchDaemons/homebrew.mxcl.dnsmasq.plist
fuseki            stopped                 
httpd             error   matteo.ceradini /Users/matteo.ceradini/Library/LaunchAgents/homebrew.mxcl.httpd.plist
mongodb-community started matteo.ceradini /Users/matteo.ceradini/Library/LaunchAgents/homebrew.mxcl.mongodb-community.plist
unbound           stopped 

如您所见,httpd 处于错误状态(实际上转到 localhost:8080 时出现错误),我不明白为什么。

有什么建议可以解决这个问题吗?

谢谢。

【问题讨论】:

  • 保留 ServerName 注释(不要明确设置)。如果您需要系统响应特定主机名,请添加虚拟主机并在此处指定 ServerName。
  • 你有什么解决办法吗,我也遇到了同样的问题。

标签: macos apache2 macos-big-sur


【解决方案1】:

有些东西似乎不起作用,但我仍然找不到原因。

我停止了所有服务(sudo brew 和没有 sudo 的 brew),然后运行命令:

sudo lsof -i :80
sudo lsof -i :8080
sudo lsof -i tcp:80
sudo lsof -i tcp:8080

结果总是一无所获。但如果我跑:

sudo brew services start httpd    
==> Successfully started `httpd` (label: homebrew.mxcl.httpd)

httpd 不会启动(即使在终端命令中它说是):

sudo brew services list
               
httpd             error   root            /Library/LaunchDaemons/homebrew.mxcl.httpd.plist

如果我检查 apachetl 错误,我总是会发现端口 80 已被占用,即使该端口上没有进程:

apachectl -e error
(48)Address already in use: AH00072: make_sock: could not bind to address 0.0.0.0:80
no listening sockets available, shutting down
AH00015: Unable to open logs

我迫切需要找到解决此错误的方法。即使我卸载并重新安装,似乎在某些 httpd 已损坏

更新:

我真的不知道我是怎么做到的,但现在它正在工作。我停止了所有 brew httpd 服务并使用以下命令重新启动 apache:

sudo apachectl -k start

这对我有用

【讨论】:

  • 哇,与 Big Sur 更新的问题相同。各种误导性的 brew 服务状态。我必须先关闭所有 brew 服务,然后运行 ​​sudo apachectl -k stop,然后再运行 sudo apachectl -k start,这使 brew 的 httpd / Apache 恢复生机。
  • 保留 httpd.conf 中的 ServerName 注释(不要明确设置)。如果您需要响应特定的主机名,请使用虚拟主机。
【解决方案2】:

我刚刚在蒙特雷遇到了完全相同的问题。随着深入研究,问题似乎是找不到符号(_apr_bucket_alloc_aligned_floor),预计在:/usr/lib/libaprutil-1.0.dylib

重新安装 apr-util 解决了我的问题:

brew reinstall apr-util

【讨论】:

    【解决方案3】:

    第一个答案: 听起来服务开始正常然后稍后(或立即)死亡,并报告错误。使用命令 'apachectl -e error' 应该提供详细信息,但您需要检查日志('vi /usr/local/var/log/httpd/error_log',然后 shift-G [to goto end])。

    第二个(解释)答案: " 如果你使用(sudo) brew services ... 来启动httpd,你必须使用正确的(sudo) brew services list 命令来检查状态:

    如果您以 root 身份启动它,则使用 root privs 列出它:

    sudo brew services start httpd > sudo brew services list

    或使用用户权限:

    brew services start httpd > brew services list。 "

    【讨论】:

    • 您好 Yuma,您能否通过执行您建议的命令来看看我的最后一个答案?
    【解决方案4】:

    sudo apachectl -e error的结果来看,它不能使用8080端口,因为另一个应用程序正在使用它。

    第一个警告 - 可以忽略 - 或在 httpd.conf 中设置 FQDN。通常它位于“/usr/local/etc/httpd”文件夹中。使用sudo vi /usr/local/etc/httpd/httpd.conf 进行编辑。 (我喜欢 vi - 使用任何你觉得舒服的东西 - sudo open -e /usr/local/etc/httpd/httpd.conf 很常见)。 默认配置有 #ServerName www.example.com:8080 行,删除那个 '#' 并将 'www.example.com:8080' 替换为 'MBP-Matteo.local' - 或其他。

    输入 sudo lsof -i tcp:8080 列出所有使用端口 8080 的应用程序,大部分只列出重要的 LISTEN 应用程序。

    下一个错误:您必须停止使用端口 8080 的其他应用程序(并防止在启动时启动) - 或 - 将 Apache 设置为使用不同的端口。 (注意:如果您选择低于 1024 的端口,则必须使用 'sudo' 来启​​动服务。)通常端口 80 专用于 Apache。要使用的端口可以通过编辑配置文件来设置,如上,然后找到'Listen 8080'这一行,并将8080替换为所需的端口。

    更改后,尝试使用 [sudo] 'brew services start httpd' 重新启动。然后检查 [sudo] 'brew services list'。希望一切正常。

    【讨论】:

      【解决方案5】:

      第一个答案:听起来服务启动正常,然后(或立即)停止,并报告错误。使用命令 'apachectl -e error' 应该提供详细信息,但您需要检查日志('vi /usr/local/var/log/httpd/error_log',然后 shift-G [to goto end])。

      第一个命令给出了这个结果:

      sudo apachectl -e error
      AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using MBP-Matteo.local. Set the 'ServerName' directive globally to suppress this message
      (48)Address already in use: AH00072: make_sock: could not bind to address 0.0.0.0:8080
      no listening sockets available, shutting down
      AH00015: Unable to open logs
      

      并且文件'/usr/local/var/log/httpd/error_log'是空的

      第二个(解释)答案:“如果你使用 (sudo) brew services ... 来启动 httpd,你必须使用正确的 (sudo) brew services list 命令来检查状态:

      如果我使用 sudo 或不使用 brew 命令执行 brew 命令,结果不会改变(鉴于之前我使用的是不使用 sudo)

      有什么建议吗?

      【讨论】:

        【解决方案6】:

        我的解决方案,停止 httpd 服务,然后检查 httpd.conf 并检查 DocumentRoot "/opt/homebrew/var/www" 该路由恢复原状后,重启httpd服务,正常运行。

        【讨论】:

        • 正如目前所写,您的答案尚不清楚。请edit 添加其他详细信息,以帮助其他人了解这如何解决所提出的问题。你可以找到更多关于如何写好答案的信息in the help center
        猜你喜欢
        • 2011-06-16
        • 1970-01-01
        • 2014-06-18
        • 2018-09-27
        • 1970-01-01
        • 2018-10-23
        • 2021-12-22
        • 1970-01-01
        • 2022-06-23
        相关资源
        最近更新 更多