• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • vbs
  • DOS/BAT
  • hta/htc
  • python
  • perl
  • VBA
  • ColdFusion
  • ruby
  • PowerShell
  • Lua
  • Golang
  • linux shell
您的位置:首页 > 脚本语言 >linux shell > Shell脚本实现启动PHP内置FastCGI Server

Shell脚本实现启动PHP内置FastCGI Server

作者:junjie 字体:[增加 减小] 来源:互联网

junjie 通过本文主要向大家介绍了php执行shell脚本,php shell脚本,php调用shell脚本,shell脚本,shell脚本编程等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

前几天把工作平台从 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 &
</div>
好了,配合 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"
</div>

如何关闭呢?
可以一次性杀灭所有的 php-cgi 进程:
ps -e | grep php-cgi | awk '{print $1}' | xargs kill
</div>
只弄死主进程也可以达到相同的效果,所有子进程也会随之消失:
cat /tmp/php.pid | xargs kill
</div>

</div>

您可能想查找下面的文章:

  • shell 脚本安装PHP扩展的简单方法
  • Shell脚本实现启动PHP内置FastCGI Server
  • shell脚本联合PHP脚本采集网站的pv和alexa排名

相关文章

  • Linux下Shell脚本中几种基本命令的替换区别
  • shell判断文件,目录是否存在或者具有权限的代码
  • shell脚本实现linux系统文件完整性检测
  • ftp自动上传脚本分享
  • Linux shell实现HTTP服务示例代码
  • linux BASH shell下设置字体及背景颜色
  • Shell中判断字符串是否为数字的6种方法分享
  • Linux 中 RPM包 安装 查询 卸载命令小结及yum命令详解
  • shell脚本编程之if语句学习笔记
  • Shell脚本实现检测某ip网络畅通情况(含短信报警功能)

文章分类

  • vbs
  • DOS/BAT
  • hta/htc
  • python
  • perl
  • VBA
  • ColdFusion
  • ruby
  • PowerShell
  • Lua
  • Golang
  • linux shell

最近更新的内容

    • shell字符串操作详解
    • Linux下 rpm 命令查询方法
    • Linux中执行shell脚本的4种方法总结
    • linux下安装oracle后使用命令行启动的方法 linux启动oracle
    • php编译安装常见错误大全和解决方法
    • sed初学者实用说明
    • 远程SSH连接服务与基本排错经验总结
    • 在linux的终端退出python命令行的方法
    • 用来检测输入的选项$1是否在PATH中的shell脚本
    • Shell脚本遍历目录并批量修改文件编码

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有