今天一个客户报告,网站服务器的apache无法启动,登陆服务器查看信息如下:
inux:~ # uname -a
Linux linux 2.6.5-7.97-default #1 Fri Jul 2 14:21:59 UTC 2004 i686 i686 i386 GNU/Linux
linux:~ # more /etc/issue
Welcome to SUSE LINUX Enterprise Server 9 (i586) - Kernel \r (\l).
linux:~ # /usr/local/apache2/bin/apachectl restart
(20014)Internal error: Error retrieving pid file logs/httpd.pid
linux:~ #more /usr/local/apache2/logs/httpd.pid
这个文件是空的,肯定是有问题的,增加一个数据试试!
linux:~ #echo "2245">>/usr/local/apache2/logs/httpd.pid
linux:~ #more /usr/local/apache2/logs/httpd.pid
2245
再次重启apache
linux:~ #/usr/local/apache2/bin/apachectl restart
这次ok了,继续查看/usr/local/apache2/logs/httpd.pid
linux:~ #more /usr/local/apache2/logs/httpd.pid
7789
可以看到,apache启动成功后,已经自动获得了一个pid值,看来apache启动的时候是会去读这个httpd.pid文件的,如果这个文件为空,就抛错了。
IXDBA.NET技术社区
httpd.pid这个文件固定了apache的进程状态,httpd.pid文件的内容其实就是apache在服务器中的pid进程号,apache每次启动都会有获得一个不同的pid号,然后把这个pid写入httpd.pid文件,进程间通信就以这个pid进行。apache在启动后,保持这个pid值不变,直到下次重新启动apache。
这点和hu-unix中apache的机制不同!