千家信息网

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

发表于:2026-10-31 作者:千家信息网编辑
千家信息网最后更新 2026年10月31日,这篇文章主要介绍了Shell脚本如何实现启动PHP内置FastCGI Server,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。前几天
千家信息网最后更新 2026年10月31日Shell脚本如何实现启动PHP内置FastCGI Server

这篇文章主要介绍了Shell脚本如何实现启动PHP内置FastCGI Server,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。

前几天把工作平台从 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,就是主进程的 PIDMASTER_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

感谢你能够认真阅读完这篇文章,希望小编分享的"Shell脚本如何实现启动PHP内置FastCGI Server"这篇文章对大家有帮助,同时也希望大家多多支持,关注行业资讯频道,更多相关知识等着你来学习!

进程 环境 处理 变量 篇文章 脚本 最大 两个 命令 官方 文件 用户 路径 参考 工作 不同 合适 实用 干净 最小 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 互联网黑科技 保险科技 互联网保险 科技互联网产品 互联网科技未来 互联网未来科技 广州善班互联网科技 重庆科技学院互联网 汉立互联网科技有限公司联系电话 创业天下互联网科技有限公司 字节跳动和互联网科技 全球顶尖互联网科技公司 昊天互联网科技有限公司 洛阳昕诺飞互联网科技有限公司 互联网科技人工智能实验室 深圳市罗太互联网科技有限公司 广州燕处互联网科技有限公司 万物互联网智能科技 北京品多多互联网科技有限公司 保山浩联互联网科技有限公司 如何强化互联网金融科技 南京欣网互联网络科技有限公司 科技制造互联网公司 互联网和高科技公司 彤创互联网科技有限公司 宝灵互联网科技有限公司 互联网科技实习生岗位 广东鹅鹅鹅互联网科技有限公司 三亚科技创新互联网基地 东风日产互联网科技公司叫什么 科技美学互联网 艺术
0