php fastcgi进程启动,Shell脚本实现启动PHP内置FastCGI Server

博主将工作平台从Ubuntu9.10升级到10.04,并遇到PHP5.3与dotdeb源的兼容问题。文章详细介绍了如何使用PHP内置的FastCGIServer替代spawn-fcgi,以及配置PHP_FCGI_CHILDREN和PHP_FCGI_MAX_REQUESTS环境变量避免502BadGateway错误。还提供了一个启动和关闭PHP-cgi进程的脚本。
摘要由CSDN通过智能技术生成

前几天把工作平台从 Ubuntu 9.10 Karmic 更新到了 10.04 Lucid,由于 Lucid 官方源自带了 PHP5.3.2,以前使用的 dotdeb的源就没法用了,一直很喜欢这个源的,不但提供了 PHP5.3 而且还有 php5-fpm 这个很实用的 fcgi 进程管理器,这个在官方源里面是没有的。强行上了 dotdeb 虽然也可以,不过必然有很多包会出现依赖问题,处理这些依赖关系是件很烦心的事情。哥啥都不怕,就怕麻烦~ :!:

对于 PHP 来说,php-fpm 还是最合适的,spawn-fcgi这类东西就不用考虑了,我宁愿用 PHP5 内置的 FastCGI Server。

通过下面的命令启动服务器,监听 9000 端口:

php-cgi -q -b 127.0.0.1:9000 &

好了,配合 nginx,可以继续开始工作了,但是你会发现每隔一段时间就会出现 502 Bad Gateway 错误,因为 php-cgi 进程处理的请求数达到最大(默认500)自动退出了。

你需要设置两个环境变量:

PHP_FCGI_CHILDREN – 派生子进程的数量

PHP_FCGI_MAX_REQUESTS – 每个子进程所能处理的最大请求数

配合这两个环境变量,启动内置的 FastCGI Server,保证 PHP 能够派生出子进程来负责处理请求,而不是由主进程来做。否则就会出现上面说的情况,达到 500 以后,自动退出。

下面是一个简单的脚本:

#!/bin/bash

## 参考:

##

##   http://php.net/manual/en/install.unix.lighttpd-14.php

##   http://kovyrin.net/2006/05/30/nginx-php-fastcgi-howto

##

## php-cgi 的文件路径

PHPFCGI=`which php-cgi`

## PID 文件路径

PHP_PID="/tmp/php.pid"

## 绑定 TCP 地址

FCGI_BIND_ADDRESS="127.0.0.1:9000"

## 绑定到 Unix domain socket

#FCGI_BIND_ADDRESS="/tmp/php.sock"

## 派生出多少个 PHP 子进程

## 其中不包括主进程

PHP_FCGI_CHILDREN=16

## 每个 PHP 进程处理的最大请求数

PHP_FCGI_MAX_REQUESTS=4096

## 用户

USERID=verdana

################## no config below this line

# 根据用户不同,切换启动命令

if test x$UID = x0; then

CMD="/bin/su -m -c \"$PHPFCGI -q -b $FCGI_BIND_ADDRESS\" $USERID"

else

CMD="$PHPFCGI -b $FCGI_BIND_ADDRESS"

fi

echo $CMD

# 相关的环境变量

E="PHP_FCGI_CHILDREN=$PHP_FCGI_CHILDREN PHP_FCGI_MAX_REQUESTS=$PHP_FCGI_MAX_REQUESTS"

# 忽略其他的环境变量,以一个干净的环境启动

nohup env - $E sh -c "$CMD" &> /dev/null &

# 记录 PHP 主进程的 PID

# $! 返回的是 sh 的 PID

# 找到所有 php-cgi 进程中最小的 PID,就是主进程的 PID

MASTER_PID=`ps -e | grep 'php-cgi' | sed -n '1p' | awk '{print $1}'`

echo $MASTER_PID > "$PHP_PID"

如何关闭呢?可以一次性杀灭所有的 php-cgi 进程:

ps -e | grep php-cgi | awk '{print $1}' | xargs kill

只弄死主进程也可以达到相同的效果,所有子进程也会随之消失:

cat /tmp/php.pid | xargs kill

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值