使用spawn-fcgi管理运行php-cgi
(2013-07-14 00:38:58)
标签:
spawn-fcgi管理运行phit |
分类: 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
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的服务
参数说明