我的服务器上使用的是 Apache 2.4。我的脚本使用了很多system()
命令,它们需要在单一进程模式下运行。
当我使用以下命令启动 apache 时:
apachetctl -X
(通常是调试模式,如果我没记错的话,它作为单个进程工作),它工作正常。但是,如果我将 Apache 作为系统守护进程启动,它就不再工作,并给出一些非常奇怪的结果。
我评论了以下行httpd.conf
LoadModule mpm_event_module modules/mod_mpm_event.so
它没有帮助,然后我取消注释它并在httpd-mpm.conf
文件中给它以下配置:
<IfModule mpm_event_module>
StartServers 1
MinSpareThreads 1
MaxSpareThreads 1
ThreadsPerChild 1
MaxRequestWorkers 1
MaxConnectionsPerChild 0
</IfModule>
但它仍然不起作用。在/etc/httpd/modules/
目录中我还有其他与线程和进程相关的模块:
mod_mpm_event.so
mod_mpm_worker.so
mod_mpm_prefork.so
我在文档中看到它们应该在 Apache 中预编译,但是当我调用命令时apachectl -l
我得到的只是这些:
# apachectl -l
Compiled in modules:
core.c
mod_so.c
http_core.c
因此,我的问题如下。如何配置 Apache 2.4,以便它能够以与使用命令启动相同的模式工作apachectl -X
。非常感谢。
答案1
缺少的是ServerLimit
定义。一旦我添加了它,问题就解决了。现在所有system()
命令都正常工作,并且我的行为与调试模式下完全相同。
<IfModule mpm_event_module>
StartServers 1
MinSpareThreads 1
MaxSpareThreads 1
ThreadsPerChild 1
MaxRequestWorkers 1
MaxConnectionsPerChild 0
ServerLimit 1
</IfModule>