通常情况下,我使用service httpd restart或者service httpd stop然后service httpd start ,在我的开发“CentOS 6.5(Final)”框中service httpd restart service httpd start如果我感觉偏执。
然而,经过几周的search,调整,更新和重新编译“破”的PHP模块(SpiderMonkey)无济于事,我有一个奇怪的启动apache使用httpd -k start命令 – 模块突然出现!
有什么不同? 我能纠正service httpd start|stop|restart行为吗?
注 :在我最初尝试纠正这个问题,我从webstatic回购安装php55w 。 我假设 ,如果我之前有过这样的想法,那么解决scheme(使用httpd -k重新启动)就可以解决问题,因为这就是apache正常情况下在生产环境(模块工作的地方 )重新启动的方式。
检查服务
服务httpd start | stop | restart调用一个服务包装器,这就意味着httpd本身是通过脚本化的方法触发的,这些方法可能不仅仅是调用httpd。 一个例子就是他们可能会在特定的位置编写一个PID文件,以跟踪当前运行的httpd进程。
很难说什么可能会导致你所看到的具体问题,但我怀疑服务包装的检查会给你所有你需要的线索。 服务包装器的典型位置可能是/etc/init.d/httpd。
确认http使用
可能,你会想尝试“哪个httpd”,并将其与在服务包装器中find的httppath进行比较。 也许你看到的是一个简单的情况下多个竞争httpd安装?
检查PHPconfiguration
也可能是相关的,如果你在某些情况下看到PHP模块,而不是在其他情况下,使用phpinfo()来查看在两种情况下发生的PHPconfiguration可能是有价值的。 在您的webroot中创build一个脚本,如下所示:
<?php echo phpinfo(); ?>
并看看在每种情况下发生了什么。 也许你的环境是以某种方式导致不同的php.ini被使用?
/etc/init.d/httpd不会调用httpd二进制文件。 当你执行service httpd start的时候,调用deamon程序在deamon启动httpd,同时指定pidfile以及/ etc / sysconfig / httpd中的选项。
start() { echo -n $"Starting $prog: " LANG=$HTTPD_LANG daemon --pidfile=${pidfile} $httpd $OPTIONS RETVAL=$? echo [ $RETVAL = 0 ] && touch ${lockfile} return $RETVAL }
同样,执行service httpd stop killproc使用源自/etc/rc.d/init.d/functions的killproc函数来停止httpd。
stop() { echo -n $"Stopping $prog: " killproc -p ${pidfile} -d ${STOP_TIMEOUT} $httpd RETVAL=$? echo [ $RETVAL = 0 ] && rm -f ${lockfile} ${pidfile} }
Init脚本可以像任何其他文本文件一样读取。 如果你想知道他们在做什么,只要找你自己。
顺便说一下,Apache 推荐使用apachectl来控制httpd。 几个init脚本是从模板写入的,可能不一定要考虑开发人员的最佳实践。
您可以编辑/etc/init.d/httpd以满足您的需求,但确保您在完成之前完全理解您正在执行的操作。