加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

使用spawn-fcgi管理运行php-cgi

(2013-07-14 00:38:58)
标签:

spawn-fcgi管理运行ph

it

分类: linux那些事

1. 下载spawn-fcgi 二进制可执行程序,可以单独下载包(网上找)
ubuntu下直接用sudo apt-get install spawn-fcgi

2. 安装php
apt-get install php5-cgi php5-mysql php5-common php5-gd php5-curl php5-xcache php5-memcached php5-mcrypt php5-cli
也可以单独下载安装,注意包依赖

3. 安装nginx
apt-get install nginx

4. php启动脚本, man spawn-fcgi 查看参数意思
有两种:
1) /usr/local/bin/spawn-fcgi -a 127.0.0.1 -p 2222 -u ${user} -g ${group} -f /usr/bin/php5-cgi -C 128

指定ip地域、端口号
而对应nginx 运行php配置为:
fastcgi_pass 127.0.0.1:2222;

2) /usr/local/bin/spawn-fcgi -u ${user} -g ${group} -s /tmp/php.sock -f /usr/bin/php5-cgi -P ${pidpath} 1>/dev/null
指定sock文件、进程号。这个会很好地利于编写重启脚本。
而对应nginx 运行php配置为:
fastcgi_pass unix:/tmp/php.sock;
3)当spawn-fcgi开启两个端口,利用nginx的upstream负载均衡php程序到不同的fcgi端口上面时,则这样设置:
nginx 负载均衡配置

upstream spawn {
# ip_hash;
server 127.0.0.1:9000 max_fails=0 fail_timeout=30s;
server 127.0.0.1:9001 max_fails=0 fail_timeout=30s;
}

而对应nginx 运行php配置为:
fastcgi_pass spaw;

附带php-cgi进程管理脚本:

1.ip端口监听,格式如下
/usr/local/bin/spawn-fcgi -a 127.0.0.1 -p 9000 -u www-data -g www-data -f /usr/bin/php5-cgi -C 10
以下是脚本实例:
#!/bin/sh
### BEGIN INIT INFO
# Provides: spawn-fcgi
# Required-Start: $all
# Required-Stop: $all
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Start spawn-fcgi at the end of boot
# Description: This command is used to configure and see disk quota statistics for Containers.
### END INIT INFO
PROVIDES=php-cgi
LIGHTTPD_FCGI=/usr/bin/spawn-fcgi
SERVER_IP=127.0.0.1
SERVER_PORT=9000
CHILD_NUM=10
SERVER_USER=www-data
SERVER_GROUP=www-data
PHP_CGI=/usr/bin/php-cgi
PGREP=/usr/bin/pgrep
KILLALL=/usr/bin/killall
### No editing below ####
cmd=$1

pcgi_start(){
echo “Starting $PROVIDES…”
### only php need numbers of childs to spawn
$LIGHTTPD_FCGI -a $SERVER_IP -p $SERVER_PORT -C $CHILD_NUM -u $SERVER_USER -g $SERVER_GROUP -f $PHP_CGI
}

pcgi_stop(){
echo “Killing $PROVIDES…”
$KILLALL $PROVIDES
}

pcgi_restart(){
pcgi_stop
sleep 2
pcgi_start
}

pcgi_status(){
$PGREP $PROVIDES > /dev/null
[ $? -eq 0 ] && echo “$PROVIDES running” || echo “$PROVIDES NOT running”

}

pcgi_help(){
echo “Usage: $0 {start|stop|restart|status}”
}

case ${cmd} in
[Ss][Tt][Aa][Rr][Tt]) pcgi_start;;
[Ss][Tt][Oo][Pp]) pcgi_stop;;
[Rr][Ee][Ss][Tt][Aa][Rr][Tt]) pcgi_restart;;
[Ss][Tt][Aa][Tt][Uu][Ss]) pcgi_status ;;
*) pcgi_help ;;
esac

2.建立本地套接字接口
/usr/local/bin/spawn-fcgi -u ${user} -g ${group} -s /tmp/php.sock -f ${phpcgi} -P ${pidpath} 1>/dev/null

#! /bin/bash
pidpath=”/tmp/spawn_php.pid”
user=”daemon”
group=”daemon”
phpcgi=”/usr/local/php/bin/php-cgi”
PHP_FCGI_CHILDREN=50
PHP_FCGI_MAX_REQUESTS=50000

echo_ok ()
{
echo -ne “/033[33C ["
echo -ne "/033[32m"
echo -ne "/033[1C OK"
echo -ne "/033[39m"
echo -ne "/033[1C ]/n”
}

start_spawn()
{
env – PHP_FCGI_CHILDREN=${PHP_FCGI_CHILDREN} PHP_FCGI_MAX_REQUESTS=${PHP_FCGI_MAX_REQUESTS} /usr/local/bin/spawn-fcgi -u ${user} -g ${group} -s /tmp/php.sock -f ${phpcgi} -P ${pidpath} 1>/dev/null
echo -ne “php-cgi start successfull”
echo_ok
}

case “$1″ in
start)
if [ ! -f $pidpath ]
then
start_spawn
else
pidcount=`ps -ef |grep ${phpcgi}|wc -l`
if [ "$pidcount" -gt "1" ]
then
echo -ne “php already running ”
echo_ok
else
rm -f $pidpath
rm -f /tmp/php.sock
start_spawn
fi
fi
;;
stop)
pid=`cat ${pidpath} 2>/dev/null`
kill ${pid} 2>/dev/null
rm -f ${pidpath} 2>/dev/null
rm -f /tmp/php.sock 2>/dev/null
echo -ne “php-cgi stop successfull”
echo_ok
;;
restart)
pid=`cat ${pidpath} 2>/dev/null`
kill ${pid} 2>/dev/null
rm -f ${pidpath} 2>/dev/null
rm -f /tmp/php.sock 2>/dev/null
echo -ne “php-cgi stop successfull”
echo_ok

if [ ! -f $pidpath ]
then
start_spawn
else
pidcount=`ps -ef |grep ${phpcgi}|wc -l`
if [ "$pidcount" -gt "1" ]
then
echo -ne “php already running ”
echo_ok
else
rm -f $pidpath
rm -f /tmp/php.sock
start_spawn
fi
fi
;;
*)
echo “Usage: $0 {start|stop|restart}”
exit 1
esac
exit


原文地址 :http://www.libaqiang.com/?p=78193

--------实践   ----------------------------------------

[root@AY1305070924544 ~]# /usr/local/spwan/bin/spawn-fcgi -a 127.0.0.1 -p 9000 -u fcgi -g fcgi -f /usr/local/php/bin/php-cgi -C 50
spawn-fcgi: child spawned successfully: PID: 1347

停止

/usr/local/spwan/bin/spawn-fcgi -stop -a 127.0.0.1   -f /usr/local/php/bin/php-cgi -C 50
spawn-fcgi: child spawned successfully: PID: 1358

启动成功

停止以后 然后再kill所有的php-cgi 因为系统会开启多个php-cgi所以

[root@AY1305070924544 ~]# killall php-cgi
[root@AY1305070924544 ~]# ps -aux | grep php-cgi 这样就关掉了php-cgi的服务

参数说明

  -f 指定调用FastCGI的进程的执行程序位置,根据系统上所装的PHP的情况具体设置
  -a 绑定到地址addr
  -p 绑定到端口port
  -s 绑定到unix socket的路径path
  -C 指定产生的FastCGI的进程数,默认为5(仅用于PHP)
  -P 指定产生的进程的PID文件路径
  -u和-g FastCGI使用什么身份(-u 用户 -g 用户组)运行,Ubuntu下可以使用www-data,其他的根据情况配置,如nobody、apache等

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有