我正在运行 nginx,php 作为 fcgi。它工作得很好,但是,php-cgi 在处理 500 个请求后不断 exit()。我尝试增加该值 (PHP_FCGI_MAX_REQUESTS),并且成功了,但这似乎是一种解决方法。然后我将其设置为 0,它还没有 exit()。但我认为 php-cgi 应该重新启动是有原因的。目前,我正在运行带有 spawn-fcgi 的 php-cgi:当 php 进程退出时,spawn-fcgi 也会退出。现在,有没有办法自动重新启动 php(没有像while [ 1 ]; do spawn-fcgi; done
etc 这样的肮脏黑客)?
答案1
您有什么理由不能切换到 PHP-FPM 吗?它随 PHP >= 5.3 一起提供,并且有一个补丁可用于 5.2。我已经使用它大约一年了,它一直非常稳定,没有问题。这将使您的进程生成问题消失,因为 PHP-FPM 会透明地处理终止旧进程并重新启动新进程。
PHP_FCGI_MAX_REQUESTS 的原因是 PHP 会在请求数达到一定数量后随机停止响应请求。似乎这个错误可能在较新的版本中已被部分修复,但在我对 5.2.x 进行测试时,我注意到它多次发生。
答案2
multiwatch 是为此而设计的(用于重新启动由 spawn-fcgi 运行的子进程)--参见http://cgit.stbuehler.de/gitosis/multiwatch/about/