前几天把工作平台从 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

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

  1. linux 关闭java进程后重启有用吗_linux启动java进程的shell脚本(包括启动,停止,重启)...

    近来使用spring boot写了一个短信服务组件,并配上此段脚本,实现对服务进程的管理 #!/bin/bash # chkconfig: 2345 85 85 # description: sms- ...

  2. java源码如何启动脚本_使用Shell脚本如何启动/停止Java的jar程序

    本文介绍如何使用Shell脚本来开启和停止jar程序的后台运行,以及如何实现out大文件的切分.另外,补充一些后台运行的小知识. 启动脚本:start_upload.sh #!/bin/sh nohu ...

  3. nohup执行的jar 怎么kill_使用Shell脚本如何启动/停止Java的jar程序

    本文介绍如何使用Shell脚本来开启和停止jar程序的后台运行,以及如何实现out大文件的切分.另外,补充一些后台运行的小知识. 启动脚本:start_upload.sh #!/bin/sh nohu ...

  4. Android 开机启动shell脚本

    接到一个集成功能的需求,然后看了一下是由上层应用 + linux进程实现的功能,需要增加开机自动启动linux进程,没弄过有点懵. 这个不怎么正确,仅供参考,在权限那块需要更改,放到system下 环 ...

  5. Android8.0 开机启动脚本,Android开机启动shell脚本(Android 8.0测试OK)

    Android 下做开机启动shell脚本的大致流程如下: 目录 写shell脚本 为脚本写te文件 在init.rc中启动脚本 添加Selinux权限 写shell脚本 比如新建一个init.tes ...

  6. Android init.rc启动shell脚本

    init.rc启动shell脚本 0. 前言 1. 编写脚本 test.sh 2. 修改 .mk 配置文件,将创建的 test.sh 编译到系统分区 3. 配置 SELinux 权限 3.1 创建 t ...

  7. 利用mac的launchd,开机后定时启动shell脚本

    利用mac的launchd开机后定时启动shell脚本 shell脚本 mac开机启动 概念 配置Mac开机后定时启动 参考文档 利用mac的launchd,开机后定时启动shell脚本 利用mac ...

  8. linux 循环显示所有的sh.*文件.,利用shell脚本遍历文件夹内所有的文件并作整理统计的方法...

    环境: Ubuntu下采用shell脚本实现 案例简述:文件夹内有许多子文件夹,这里需要自动读取所有的文件,包括他们的地址和文件名.通过观察文件名的规律,按照一定的规则裁剪出文件名的某一部分,该部分为 ...

  9. shell脚本读取文件夹内文件名称

    shell脚本读取文件夹内文件名称代码如下: 1.配置文件: readFilePath=/wocloud/soft/tomcat/selfYearAppraiseTomcat/selfYearAppr ...

最新文章

  1. linux shell 执行多个文件,/etc/profile、~/.bash_profile等几个文件的执行过程
  2. 出一个简单的Spring框架入门教程
  3. 微信在诺基亚手机登录服务器繁忙,马化腾正式宣布:禁止在该手机上登录QQ和微信?网友:诺基亚再见...
  4. 关于SharePoint 2010体系架构的几个话题
  5. A*寻路算法与它的速度
  6. vs2013 无法打开 源 文件 SDKDDKVer.h
  7. 你最擅长哪种数学思维?
  8. Ext scope 学习
  9. MAC下的环境变量配置
  10. Docker逐渐火起来了,收集了一些这方面的书
  11. 初学Codesmith,第一次写模板
  12. C/C++运行库简介
  13. 可以拍c语言答案的软件下载,c语言二级考试题库app下载-C语言二级考试题库 安卓版v2.3-PC6安卓网...
  14. AquaCrop_原理学习笔记06:土壤水分运动
  15. linux双系统无u盘安装教程视频教程,U盘安装Windows和Ubuntu 15.04双系统图解教程
  16. Swing Copters摇摆直升机高分攻略,游戏攻略
  17. Arnold材质节点篇- GPU渲染从入门到放弃
  18. 研究生联系导师需要注意什么
  19. eclipse java 测试_测试:LR中使用Eclipse来进行Java程序的测试方法
  20. 洛谷 [P1638 逛画展] (尺取法)

热门文章

  1. R字符串(Strings)转为日期类型(Dates)
  2. 异常数据(outlier data)处理基于分位数法(箱图法、箱型法)替换及删除方案
  3. 目前服务器操作系统版本号,目前服务器操作系统版本号
  4. 二代数据 模拟软件wgsim
  5. java字典序列化_Java对象序列化,Serialize Java Data Object,音标,读音,翻译,英文例句,英语词典...
  6. 字节数与字符数mysql_数据库字段长短之字节与字符
  7. panads 访问 csv 数据集
  8. hongyi lee 作业1
  9. 时间序列(二)数据重采样
  10. 1. 训练集、开发集、测试集(Train/Dev/Test sets)