通过 apachectl 启动 apache 时出现问题

通过 apachectl 启动 apache 时出现问题

我正在尝试将我们的生产网络服务器移至 Linux 机器。当我使用 apachectl 发出启动命令时,什么也没有发生,它会返回到命令行。如果我运行apachectl status,它会告诉我“ELinks:连接被拒绝”。

但是,如果我尝试直接使用启动 apache httpd -k start,它可以正常启动 apache 进程。

有什么想法可以解释为什么我不能使用 apachectl 来启动它吗?另外,直接通过发出命令来启动它有什么大不了的吗httpd -k start?我总是以这种方式启动它,但我担心 apache 文档中的以下行

一般来说,不应直接调用 httpd,而应在基于 Unix 的系统上通过 apachectl 调用

http://httpd.apache.org/docs/2.0/programs/httpd.html

答案1

您从 apachectl 命令中收到什么错误?apachectl 只不过是一个 shell 脚本,因此您可以通过使用 来调用它以进行调试sh -x /path/to/apachectl start。您将看到大量信息溢出到屏幕上。如果您没有收到任何错误或输出,并且系统上没有运行 httpd 进程,您可能需要查看您的日志文件,例如/var/log/messages

此外,运行apachectl start命令后,您还可以echo $?查看退出状态代码。这些都是您可以提供的信息,以便我们进一步提供帮助。

答案2

值得一提的是,我在安装基本 Linux 系统后下载了 Apache 软件包。它们编译得很好,但没有警告链接包裹丢失。

  • 因此,请确保你已经运行了yum install links

    此外,文档中没有提到位于不同位置的两个相似文件之间的区别: apachectl/usr/local/apache2/bin/apachectlusr/sbin/apachectl。我最终使用了/usr/sbin/apachectl/usr/local/apache2/bin/apachectl到今天仍然返回错误: 。不知道为什么。但是/usr/local/apache2/apachectl: line 94: lynx: command not foundApache 可以使用该版本。/usr/sbin/apachectl

  • [root@]# ls -l /usr/local/apache2/bin/apachectl
    -rwxr-xr-x. 1 root root 3428 Jan 27 12:11 /usr/local/apache2/bin/apachectl
  • [root@]# ls -l /usr/sbin/apachectl
    -rwxr-xr-x. 1 root root 3916 Dec  8 12:10 /usr/sbin/apachectl

我被困在文件 /etc/httpd/conf/httpd.conf 的所有复杂细节中。我完全支持网络安全,但对于像我这样毫无头绪的新手来说,为了最终获得一个简单的服务而不得不浏览大量的互联网帮助文件(如这个)实在是太麻烦了。

对于其他任何陷入无法apachectl status返回合适值困境的人 - 我敢打赌,您也会陷入我遇到的困境,因为/etc/httpd/conf/httpd.conf文件中的默认值并不是那么好。取消注释并修改相应的部分。您可能希望Allow from all<Location /server-info><Location /server-status>点排序,以确保您的服务正常启动。确保始终使用重新启动服务。然后,当您知道您的 Apache 服务器运行良好时,service httpd restart您可以减少访问并返回规则。Deny from all

答案3

我也遇到了同样的问题,为了解决这个问题,我需要在 httpd.conf 文件中启用服务器状态,如下所示./apachectl 状态命令尝试连接默认情况下未配置的服务器状态页面

[root@bin]# ./apachectl 状态
                                   未找到

   该服务器上未找到所请求的 URL /server-status。


[root@bin]# sh -x ./apachectl 状态
+ ACMD=状态
+ ARGV=状态
+ HTTPD = /usr/local/rail_apache/bin/httpd
+ 测试-f /usr/local/rail_apache/bin/envvars
+ ./usr/local/rail_apache/bin/envvars
++ 测试 x'!=' x
++LD_LIBRARY_PATH=/usr/local/rail_apache/lib
++ 导出 LD_LIBRARY_PATH
+ LYNX='链接-转储'
+ STATUSURL=http://example.com:80/服务器状态
++ ulimit -H -n
+ ULIMIT_MAX_FILES ='ulimit-S-n 4096'
+'[''xulimit -S -n 4096''!='x']'
+ ulimit-S-n 4096
+错误=0
+'['xstatus = x']'
+ 案例 $ACMD
+ 链接 -dump http://example.com:80/server-status
+ awk ' /process$/ { 打印;退出 } { 打印 } '
                                   未找到

   该服务器上未找到所请求的 URL /server-status。
+ 退出 0

答案4

如果您遇到与以下相同的问题: + awk ' /process$/ { print; exit } { print } ' Not Found

该服务器上未找到所请求的 URL /server-status。

你需要修复它: 1. vim /sbin/apacheclt 找到 STATUSURL="http://localhost:80/server-status" 然后更改 STATUSURL="http://localhost:80/" 2. 重新启动 apacheclt ,它出现内容: [root@CentOS6-07 ~]# /sbin/apachectl status 它起作用了!

相关内容