php fastcgi进程启动,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,就是主进程的 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相关推荐
- linux 关闭java进程后重启有用吗_linux启动java进程的shell脚本(包括启动,停止,重启)...
近来使用spring boot写了一个短信服务组件,并配上此段脚本,实现对服务进程的管理 #!/bin/bash # chkconfig: 2345 85 85 # description: sms- ...
- java源码如何启动脚本_使用Shell脚本如何启动/停止Java的jar程序
本文介绍如何使用Shell脚本来开启和停止jar程序的后台运行,以及如何实现out大文件的切分.另外,补充一些后台运行的小知识. 启动脚本:start_upload.sh #!/bin/sh nohu ...
- nohup执行的jar 怎么kill_使用Shell脚本如何启动/停止Java的jar程序
本文介绍如何使用Shell脚本来开启和停止jar程序的后台运行,以及如何实现out大文件的切分.另外,补充一些后台运行的小知识. 启动脚本:start_upload.sh #!/bin/sh nohu ...
- Android 开机启动shell脚本
接到一个集成功能的需求,然后看了一下是由上层应用 + linux进程实现的功能,需要增加开机自动启动linux进程,没弄过有点懵. 这个不怎么正确,仅供参考,在权限那块需要更改,放到system下 环 ...
- Android8.0 开机启动脚本,Android开机启动shell脚本(Android 8.0测试OK)
Android 下做开机启动shell脚本的大致流程如下: 目录 写shell脚本 为脚本写te文件 在init.rc中启动脚本 添加Selinux权限 写shell脚本 比如新建一个init.tes ...
- Android init.rc启动shell脚本
init.rc启动shell脚本 0. 前言 1. 编写脚本 test.sh 2. 修改 .mk 配置文件,将创建的 test.sh 编译到系统分区 3. 配置 SELinux 权限 3.1 创建 t ...
- 利用mac的launchd,开机后定时启动shell脚本
利用mac的launchd开机后定时启动shell脚本 shell脚本 mac开机启动 概念 配置Mac开机后定时启动 参考文档 利用mac的launchd,开机后定时启动shell脚本 利用mac ...
- linux 循环显示所有的sh.*文件.,利用shell脚本遍历文件夹内所有的文件并作整理统计的方法...
环境: Ubuntu下采用shell脚本实现 案例简述:文件夹内有许多子文件夹,这里需要自动读取所有的文件,包括他们的地址和文件名.通过观察文件名的规律,按照一定的规则裁剪出文件名的某一部分,该部分为 ...
- shell脚本读取文件夹内文件名称
shell脚本读取文件夹内文件名称代码如下: 1.配置文件: readFilePath=/wocloud/soft/tomcat/selfYearAppraiseTomcat/selfYearAppr ...
最新文章
- linux shell 执行多个文件,/etc/profile、~/.bash_profile等几个文件的执行过程
- 出一个简单的Spring框架入门教程
- 微信在诺基亚手机登录服务器繁忙,马化腾正式宣布:禁止在该手机上登录QQ和微信?网友:诺基亚再见...
- 关于SharePoint 2010体系架构的几个话题
- A*寻路算法与它的速度
- vs2013 无法打开 源 文件 SDKDDKVer.h
- 你最擅长哪种数学思维?
- Ext scope 学习
- MAC下的环境变量配置
- Docker逐渐火起来了,收集了一些这方面的书
- 初学Codesmith,第一次写模板
- C/C++运行库简介
- 可以拍c语言答案的软件下载,c语言二级考试题库app下载-C语言二级考试题库 安卓版v2.3-PC6安卓网...
- AquaCrop_原理学习笔记06:土壤水分运动
- linux双系统无u盘安装教程视频教程,U盘安装Windows和Ubuntu 15.04双系统图解教程
- Swing Copters摇摆直升机高分攻略,游戏攻略
- Arnold材质节点篇- GPU渲染从入门到放弃
- 研究生联系导师需要注意什么
- eclipse java 测试_测试:LR中使用Eclipse来进行Java程序的测试方法
- 洛谷 [P1638 逛画展] (尺取法)
热门文章
- R字符串(Strings)转为日期类型(Dates)
- 异常数据(outlier data)处理基于分位数法(箱图法、箱型法)替换及删除方案
- 目前服务器操作系统版本号,目前服务器操作系统版本号
- 二代数据 模拟软件wgsim
- java字典序列化_Java对象序列化,Serialize Java Data Object,音标,读音,翻译,英文例句,英语词典...
- 字节数与字符数mysql_数据库字段长短之字节与字符
- panads 访问 csv 数据集
- hongyi lee 作业1
- 时间序列(二)数据重采样
- 1. 训练集、开发集、测试集(Train/Dev/Test sets)