我正在尝试将我们的生产网络服务器移至 Linux 机器。当我使用 apachectl 发出启动命令时,什么也没有发生,它会返回到命令行。如果我运行apachectl status
,它会告诉我“ELinks:连接被拒绝”。
但是,如果我尝试直接使用启动 apache httpd -k start
,它可以正常启动 apache 进程。
有什么想法可以解释为什么我不能使用 apachectl 来启动它吗?另外,直接通过发出命令来启动它有什么大不了的吗httpd -k start
?我总是以这种方式启动它,但我担心 apache 文档中的以下行
一般来说,不应直接调用 httpd,而应在基于 Unix 的系统上通过 apachectl 调用
答案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/apachectl
和usr/sbin/apachectl
。我最终使用了/usr/sbin/apachectl
。/usr/local/apache2/bin/apachectl
到今天仍然返回错误: 。不知道为什么。但是/usr/local/apache2/apachectl: line 94: lynx: command not found
Apache 可以使用该版本。/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 它起作用了!