Apache正在运行; 但是,它报告不是,它不会重新启动。
# /etc/init.d/httpd status httpd.worker is stopped # /usr/sbin/lsof -iTCP:80 COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME httpd.wor 1169 root 3u IPv6 2974 TCP *:http (LISTEN) httpd.wor 1211 daemon 3u IPv6 2974 TCP *:http (LISTEN) httpd.wor 1213 daemon 3u IPv6 2974 TCP *:http (LISTEN) httpd.wor 1215 daemon 3u IPv6 2974 TCP *:http (LISTEN) httpd.wor 1352 daemon 3u IPv6 2974 TCP *:http (LISTEN) #/etc/init.d/httpd restart Stopping httpd: [FAILED] Starting httpd: [Wed Mar 24 10:33:51 2010] [warn] module proxy_ajp_module is already loaded, skipping (98)Address already in use: make_sock: could not bind to address [::]:80 (98)Address already in use: make_sock: could not bind to address 0.0.0.0:80 no listening sockets available, shutting down Unable to open logs [FAILED]
操作系统:Linux DISTRO:CENTOS 5
重新启动服务器并没有帮助,也没有杀死Apache并启动它。
任何想法是什么导致这种不一致?
通常情况下, init.d脚本使用文件来存储启动的守护进程的PID,例如/var/run/httpd.pid或类似的东西。 可能是脚本存储了错误的PID或过时的PID,或者存在权限问题,并且脚本无法首先创build文件。
我猜测你以前的Apache启动时有一个陈旧的PID文件。 我无法访问CentOS系统,但在Fedora 11机器上,此文件位于/var/run/httpd/httpd.pid中 – 您可以通过在/etc/init.d中search“pidfile”来检查您的位置/ httpd(我假设你正在使用从RPM安装的Apache版本;如果没有,并且你在/ usr / local / apache2或类似的地方有apache,则PID文件进入/ usr / local / apache2 / logs)。
停止Apache,删除陈旧的PID文件,然后重新启动,你应该没问题。
init.d文件通常只是一个shell脚本 – 它可能调用apachectl来启动和停止进程。 请检查发送的命令是否停止进程,并查看当您尝试直接运行任何命令时会发生什么,而不使用init.d文件。
如果仍然不起作用,请检查您的networking服务器的错误日志,看看有没有什么有用的。
对于debugging,您也可以尝试使用apachectl graceful命令发送 – 它会重新加载configuration并重新启动subprocess,而不会取消主进程。 (问题是,这意味着有一些configuration更改不会生效,但除非您正在调整,否则可能无关紧要)
我猜你有两个不同的init脚本启动apache,而且不同的init脚本使用不同的pid文件。
如果你做killall -9 httpd ,然后通过/etc/init.d/httpd start启动Apache,会发生什么?