Shell指令碼實現啟動PHP內建FastCGI Server_linux shell

來源:互聯網
上載者:User

前幾天把工作平台從 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

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.