1. 程式人生 > >php-fpm的安裝和啟動

php-fpm的安裝和啟動

安裝 php-fpm

我的機器是centos 6.2 之前就已經安裝過了php 5.4.11,PHP在 5.3.3 之後已經講php-fpm寫入php原始碼核心了。所以已經不需要另外下載了。我這裡是5.4.11所以就可以直接用。

由於我php已經安裝好了,而且之前編譯的時候沒有帶上fpm模式,所以我必須找到原始碼重新編譯一下:

要想使php支援php-fpm,只需要在編譯的時候帶上 --enable-fpm 就可以了。

所以,我需要找到之前的編譯引數, 後面加上--enable-fpm ,重新編譯下就可以了。之前就講過,有2種方式可以找到之前的編譯引數:

在原始碼 /lamp/php-5.4.11/中找到 config.nice,這個就是之前的編譯引數
在php.ini配置檔案中找到Configure相關的配置 : /usr/local/php/bin/php -i |grep 'Configure'

好,我們開始,找到之前的編譯引數:

[root@localhost /]# cd /lamp/php-5.4.11 & vi config.nice
'./configure' \
'--prefix=/usr/local/php' \
'--with-config-file-path=/usr/local/php/etc/' \
'--with-apxs2=/usr/local/apache/bin/apxs' \
'--with-mysql=/usr/local/mysql/' \
'--with-libxml-dir=/usr/local/libxml2/' \
'--with-png-dir=/usr/local/libpng/'
\ '--with-jpeg-dir=/usr/local/jpeg8/' \ '--with-freetype-dir=/usr/local/freetype/' \ '--with-gd=/usr/local/gd/' \ '--with-zlib-dir=/usr/local/zlib/' \ '--with-mcrypt=/usr/local/libmcrypt/' \ '--with-mysqli=/usr/local/mysql/bin/mysql_config' \ '--enable-soap' \ '--enable-mbstring=all' \ '--enable-sockets' \

加上--enable-fpm後,重新編譯:

[root@localhost /]# cd /lamp/php-5.4.11
[root@localhost php-5.4.11]# './configure' \
    '--prefix=/usr/local/php' \
    '--with-config-file-path=/usr/local/php/etc/' \
    '--with-apxs2=/usr/local/apache/bin/apxs' \
    '--with-mysql=/usr/local/mysql/' \
    '--with-libxml-dir=/usr/local/libxml2/' \
    '--with-png-dir=/usr/local/libpng/' \
    '--with-jpeg-dir=/usr/local/jpeg8/' \
    '--with-freetype-dir=/usr/local/freetype/' \
    '--with-gd=/usr/local/gd/' \
    '--with-zlib-dir=/usr/local/zlib/' \
    '--with-mcrypt=/usr/local/libmcrypt/' \
    '--with-mysqli=/usr/local/mysql/bin/mysql_config' \
    '--enable-soap' \
    '--enable-mbstring=all' \
    '--enable-sockets' \
    '--enable-fpm'
[root@localhost php-5.4.11] make && make install

啟動 php-fpm

安裝完成之後,我們嘗試著啟動:

啟動命令是:

/usr/local/php/sbin/php-fpm

報錯了:

[26-Feb-2015 15:39:55] ERROR: failed to open configuration file '/usr/local/php/etc/php-fpm.conf': No such file or directory (2)
[26-Feb-2015 15:39:55] ERROR: failed to load configuration file '/usr/local/php/etc/php-fpm.conf'
[26-Feb-2015 15:39:55] ERROR: FPM initialization failed

錯誤資訊說找不到 php-fpm.conf

哦,原來是php-fpm.conf還沒有,我們到 /usr/local/php/etc目錄下將php-fpm.conf.default拷貝也一份成php-fpm.conf

cd /usr/local/php/etc/
cp php-fpm.conf.default php-fpm.conf

編輯一下這個配置檔案:

vim php-fpm.conf
pid = run/php-fpm.pid
user = www
group = www

再次嘗試啟動:

/usr/local/php/sbin/php-fpm

再次報錯說www 使用者不存在:

[26-Feb-2015 15:57:38] ERROR: [pool www] cannot get uid for user 'www'
[26-Feb-2015 15:57:38] ERROR: FPM initialization failed

好,那我們新建www 使用者組:

groupadd www
useradd -g www www

再次啟動:

/usr/local/php/sbin/php-fpm

沒有任何的輸出,表示成功了!!!

php-fpm佔用的是9000埠,我們檢視下程序:

[root@localhost php-5.4.11]# ps -ef|grep php-fpm
root      1377  1231  0 11:19 pts/1    00:00:00 grep php-fpm
root     29249     1  0 06:22 ?        00:00:00 php-fpm: master process (/usr/local/php/etc/php-fpm.conf)
www      29250 29249  0 06:22 ?        00:00:00 php-fpm: pool www
www      29251 29249  0 06:22 ?        00:00:00 php-fpm: pool www
root     32132  6158  0 08:25 pts/2    00:00:00 vi php-fpm.conf
[root@localhost php-5.4.11]# netstat -tnl | grep 9000
tcp        0      0 127.0.0.1:9000              0.0.0.0:*                   LISTEN      
[root@localhost php-5.4.11]# 

好,安裝和啟動都OK了。

開機啟動 php-fpm

之前接說過php-fpm是獨立於web伺服器和php之前的一層伺服器,所以,我們需要開機啟動它

開機啟動的配置檔案是:/etc/rc.local ,加入 /usr/local/php/sbin/php-fpm 即可

[root@localhost init]# vi /etc/rc.local
      1 #!/bin/sh
      2 #
      3 # This script will be executed *after* all the other init scripts.
      4 # You can put your own initialization stuff in here if you don't
      5 # want to do the full Sys V style init stuff.
      6 
      7 touch /var/lock/subsys/local
      8 /usr/local/apache/bin/apachectl start
      9 /usr/local/bin/redis-server /etc/redis.conf
     10 /usr/local/php/sbin/php-fpm

光安裝好php-fpm也是沒用的,得配合web伺服器使用,下一節,我要學習nginx的安裝,以及nginx連線php-fpm來使用php。

重啟 php-fpm

我們在新安裝擴充套件後,是需要重新php-fpm的,已使擴充套件生效。

最簡單粗暴的重新php-fpm的方式是:

先找到php-fpm的程序號,kill 掉,再用/usr/local/php/sbin/php-fpm 這樣啟動。

其實還有更多溫和的方法,就是使用訊號。

INT, TERM 立刻終止
QUIT 平滑終止
USR1 重新開啟日誌檔案
USR2 平滑過載所有worker程序並重新載入配置和二進位制模組

示例:

php-fpm 關閉:

kill -INT `cat /usr/local/php/var/run/php-fpm.pid`

php-fpm 重啟:

kill -USR2 `cat /usr/local/php/var/run/php-fpm.pid`

這裡寫圖片描述