windows下php-cgi管理

2020-03-05

xxfpm

windows下php-cgi启动后,在接收500次左右的请求后会自动中断,为了防止这种情况,网上有两种解决方法:1、写脚本监控php-cgi的进程 2、使用xxfpm管理器

我自己使用的是xxfpm:xxfpm是github一位开发者提供的开源程序:github地址:https://github.com/78/xxfpm

下载地址,可以在github上下载,或是在开发者自己的博客上下载:https://xiaoxia.org/upfiles/2011/02/xxfpm.zip

第一次使用时可能会提示缺少pthreadGC2.dll;下载后将dll注册注册即可:dll文件github的压缩包的bin目录下,或者自行在网上下载

将这个文件复制到C:/Windows/SysWOW64目录(如果系统是32位的,将dll文件复制到C:\Windows\System32下);
然后打开"开始-运行-输入regsvr32 pthreadgc2.dll,回车,如果报错,用下面的方法。
新建一个文件 registe.bat,和pthreadgc2.dll同目录
 @echo 开始注册
 copy pthreadgc2.dll %windir%\SysWOW64\
 regsvr32 %windir%\SysWOW64\pthreadgc2.dll /s
 @echo pthreadgc2.dll注册成功
 @pause
运行registe.bat,便会完成pthreadgc2.dll注册

参数:

-n, -要保留的进程数
-i, -ip地址绑定
-p, -端口端口绑定,默认为8000
-u, -用户使用指定的linux用户启动进程
-g, -使用指定的linux组启动进程
-r, -root修改进程的root direcotry
-h, -help输出使用信息并退出
-v, -版本输出版本信息并退出

使用:

-n 开启的进程数  -p端口 -c指定php.ini路径
不指定php.ini
xxfpm z:/php5/php-cgi.exe -n 5 -p 8080

指定php.ini
xxfpm “z:/php5/php-cgi.exe -c z:/php5/php.ini” -n 5 -i 127.0.0.1 -p 8080

这样方式并不能以守护进程方式运行;以守护方式运行需要下载  RunHiddenConsole.exe 

    RunHiddenConsole.exe的作用是在执行完命令行脚本后可以自动关闭脚本,而从脚本中开启的进程不被关闭。简单来说就是黑窗体(CMD命令窗体)不会显示,但CMD命令窗体中运行的程序不会被关闭,特别是一些会挂住必须显示命令窗体的命令还真不错,如 Tomcat、Php、Nginx等。

RunHiddenConsole.exe的同级目录下创建bat文件

下载链接(包含RunHiddenConsole.exe和xxfpm

bat命令中注意php-cgi的参数与xxfpm参数并不相同,注意参数的使用

启动php-cgi

@echo off
set run_home= E:/php_pool/running
set xxfpm_home= E:/php_pool/running/bin
set php_home= E:/php_pool/php-7.3.15-nts
set php_port= 9000
set php_process= 5

echo Starting PHP FastCGI...
%run_home%/RunHiddenConsole %xxfpm_home%/xxfpm.exe %php_home%/php-cgi.exe -n %php_process% -p %php_port%

exit

停止php-cgi

注:php-cgi的进程不能直接杀掉,需要杀掉xxfpm的进程,杀掉xxfpm后,php-cgi进程会一起被杀掉

@echo off
echo Stopping PHP FastCGI...
taskkill /F /IM xxfpm.exe > nul
exit

使用winsw将php注册为服务

winsw的配置参考:windows将脚本/程序注册为服务,winsw中所需的xml配置如下:

<service>
  <id>php7.3.4</id>
  <name>php7.3.4</name>
  <description>php7.3.4</description>
  <depend></depend>
  <executable>D:\php\php7.3.4nts\service\xxfpm\bin\xxfpm.exe</executable>
  <startarguments>D:\php\php7.3.4nts\php-cgi.exe -n 5 -p 9000</startarguments>
  <stopexecutable>taskkill /f /im xxfpm.exe</stopexecutable>
  <logpath>%BASE%/service-log</logpath>
  <!-- 按日期截断日志文件 -->
  <log mode="roll-by-time">
    <pattern>yyyyMMdd</pattern>
  </log> 
</service>

文章内容来源于:https://www.jianshu.com/p/1f2d4b1ca10d
           https://blog.csdn.net/johnnycode/article/details/40148171

{/if}