在RHEL中重新启动httpd服务返回“停止httpd:” – 我该如何解决这个问题?

这是我的一个问题的第一个迹象:

$ sudo /sbin/service httpd restart Stopping httpd: [FAILED] Starting httpd: no listening sockets available, shutting down Unable to open logs [FAILED] 

我知道httpd正在运行

 $ ps -ef | grep httpd | grep -v grep apache 9619 20181 0 07:08 ? 00:00:03 /usr/sbin/httpd apache 10092 20181 0 Jan24 ? 00:00:07 /usr/sbin/httpd apache 13086 20181 0 06:09 ? 00:00:00 /usr/sbin/httpd apache 13717 20181 0 Jan25 ? 00:00:01 /usr/sbin/httpd apache 14730 20181 0 07:13 ? 00:00:01 /usr/sbin/httpd apache 16359 20181 0 09:54 ? 00:00:00 /usr/sbin/httpd root 20181 1 0 2011 ? 00:00:01 /usr/sbin/httpd apache 21450 20181 0 09:55 ? 00:00:00 /usr/sbin/httpd 

它正在使用端口80和443

 $ sudo netstat -lnp | grep :80 tcp 0 0 :::80 :::* LISTEN 9619/httpd $ sudo netstat -lnp | grep :443 tcp 0 0 :::443 :::* LISTEN 9619/httpd 

所以我假设我得到消息“没有可用的套接字”,因为httpd不能停止释放端口80和443。

我正在使用RHEL 5.7版本:

 $ cat /etc/redhat-release Red Hat Enterprise Linux Server release 5.7 (Tikanga) 

我可以看到一堆运行httpd的进程:

 $ pgrep httpd 9619 10092 13086 13717 14730 16359 20181 21450 

什么可以防止httpd停止? 如果我杀死httpd的进程,我能否启动httpd没有问题?

/etc/init.d/httpd中的stop函数使用pidfile:

 killproc -p ${pidfile} -d ${STOP_TIMEOUT} $httpd 

可能是,pidfile /var/run/httpd.pid已经过时或缺失了(你是否可以在不使用/etc/init.d脚本或service情况下启动httpd)? 你可以用你的ps -ef |grep http来检查这个文件(及其内容)。

sudo kill 20181 ,只要sudo kill 20181 。 然后像往常一样启动服务。 然后尝试重新启动。

如果再次发生,你可能应该调查为什么pid文件正在与进程表冲突。

你应该能够杀死HTTP进程 – 当然连接将被中断,如果有人正在向你发送可能会丢失的数据(比如提交表单)。 但是,一般来说,这是可以的。 service httpd restart会发生同样的情况。 您可能需要清理/ var / lock / subsys / httpd上的locking文件(删除该文件)。

然后我会运行service httpd configtest来确保你的Apacheconfiguration至less是可装载的。 然后尝试使用service httpd start来启动它

你是对的,正在使用的端口错误是由于httpd仍在运行的事实,所以正在使用这些端口。 同样,日志错误也是如此。

另一件事 – 没有必要运行sudo来使用psnetstat 。 养成只使用sudo来处理需要的东西的习惯。 当你不想要的时候,当你避免使用root权限运行一些具有破坏性的命令的时候,它会为你节省麻烦。

用ispconfig3和Apache进入centos6类似。 cjc的post帮我find了答案。 (谢谢!)原来,/etc/httpd/conf/httpd.conf中的PIDpath与/etc/init.d/httpd中的path不同。 一旦我使他们相同(我select编辑httpd.conf离开init.d脚本单独)然后杀死httpd使用PID显示在ps -ef然后再启动httpd /etc/init.d/httpd start&瞧它的工作原理这应该。 服务httpd状态/停止/重新启动/现在开始所有工作如期。

我怀疑http.conf文件可能是从centos5的备份中取代的,也可能是在某些时候编辑过的,除非默认是错的,尽pipe这似乎不大可能。

/etc/httpd/conf/httpd.conf中

 Before: PidFile run/httpd.pid After: PidFile run/httpd/httpd.pid 

/etc/init.d/httpd给出了它应该是什么的暗示:

 # pidfile: /var/run/httpd/httpd.pid 

在我的状态显示停止,即使httpd显然运行在ps。 停止给出错误,开始给端口一些已经在使用中的错误。 事后看来,现在是有道理的,但是如果有其他人跑到相同的位置,就想发布这个。 停止也给了httpd死了,但有时locking子。

示例错误我得到:

 Stopping httpd: [FAILED] Starting httpd: (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