-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathfpm.js
More file actions
executable file
·56 lines (50 loc) · 1.57 KB
/
fpm.js
File metadata and controls
executable file
·56 lines (50 loc) · 1.57 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
/**
*
*用于在windows系统下面守护 fast-cgi进程,保证web服务正常运行
**/
var spawn = require('child_process').spawn;
var fs = require("fs");
var fastCgiCmd = "C:\\Program Files (x86)\\php-5.5.8\\php-cgi.exe";
if (!fs.existsSync(fastCgiCmd)){
console.log('can\'t found ' + fastCgiCmd);
process.exit();
}
var fastCgiListen = '127.0.0.1:9123';
var fastCgiIniPath = 'c:\\Program Files (x86)\\php-5.5.8\\php.ini';
if (!fs.existsSync(fastCgiIniPath)){
console.log('can\'t found ' + fastCgiIniPath);
process.exit();
}
var fastCgiArg = ['-b',fastCgiListen,'-c',fastCgiIniPath];
var _ = require('underscore');
var fpm = {
fastCgiPool:new Array(),
fastCgiNum : 10,//默认启动多少个fastCgi
init:function(){
for (var i=0;i<fpm.fastCgiNum;i++){
fpm.makeOneFastCgi();
}
},
removeFastCgiFromPool:function(fastCgiPid){
var beforeRemove = fpm.fastCgiPool.length;
fpm.fastCgiPool = _.filter(fpm.fastCgiPool, function(fastCgiPoolItem){ return fastCgiPoolItem.pid != fastCgiPid; });
var afterRemove = fpm.fastCgiPool.length;
if (afterRemove< beforeRemove){
fpm.makeOneFastCgi(); //创建一个fastcgi进程
}
},
makeOneFastCgi:function(){
console.log('start cgi');
var fastCgi = spawn(fastCgiCmd, fastCgiArg);
fpm.fastCgiPool.push(fastCgi);
(function(fastCgi){
fastCgi.stderr.on('data', function (data) { //cgi 出错
fpm.removeFastCgiFromPool(fastCgi.pid);
});
fastCgi.on('close', function (code) {
fpm.removeFastCgiFromPool(fastCgi.pid);
});
})(fastCgi);
}
}
fpm.init();