这是我的一个问题的第一个迹象:
$ 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
来使用ps
或netstat
。 养成只使用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