const fs = require('fs'); const os = require('os'); const path = require('path'); const {env} = require('process'); const request = require('sync-request'); console.log('服务端环境变量 ', env.SERVER_ID, env.SERVER_TYPE); if (env.SERVER_ID) { let type = env.SERVER_TYPE || 'game'; let url = `http://server-tool:7456/server/getConfig?sid=${env.SERVER_ID}&type=${type}` console.log('拉取服务端启动配置文件', url); let res = request('GET', url, { headers: { 'content-type': 'application/json' } }); const body = JSON.parse(res.body.toString()); if (body) { fs.writeFileSync('config.json', JSON.stringify(body, null, 2)); console.log('服务端配置: ', body); } else { console.log('拉取失败'); } } //读取服务配置 const config = fs.existsSync(path.resolve(__dirname, 'config.json')) ? JSON.parse(fs.readFileSync(path.resolve(__dirname, 'config.json'), 'utf-8')) : {}; const dis = config.serverId != undefined ? config.serverId : '0'; let instancesNum = 8; if(config.openTime){ let openDate = new Date(config.openTime); //计算openTime距离今天的天数 let today = new Date(); // 获取两个日期之间的毫秒差 let timeDiff = today.getTime() - openDate.getTime(); // 将毫秒差转换为天数 let daysDiff = Math.floor(timeDiff / (1000 * 3600 * 24)); console.log(`已开服天数:${daysDiff}`); //如果开服超过3天的区,则只开区2个进程 if(daysDiff > 3){ instancesNum = 2; } } const localApps = [ { // 应用程序名称 name: 'heijiao_msg_s' + dis, // 执行文件 script: 'index.js', // 应用程序所在的目录 cwd: './', //集群实例数量,0表示根据cpu核心数自动控制 instances: instancesNum, // 传递给脚本的参数 args: '-serverType msg', //允许强制gc node_args: '--expose-gc', // 是否启用监控模式,默认是false。如果设置成true,当应用程序变动时,pm2会自动重载。这里也可以设置你要监控的文件。 watch: false, // 不用监听的文件 ignore_watch: [ 'logs' ], //out_file: "/dev/stdout", //error_file: "/dev/stderr" // 自定义应用程序的错误日志文件(错误日志文件) error_file: './logs/errMsg.log', // 自定义应用程序日志文件(正常日志文件) out_file: './logs/outMsg.log', // 指定日志文件的时间格式 log_date_format: 'YYYY-MM-DD HH:mm:ss', } ]; const crossApps = [ { // 应用程序名称 name: 'heijiao_cross_s' + dis, // 执行文件 script: 'index.js', // 应用程序所在的目录 cwd: './', // 传递给脚本的参数 args: '-serverType cross', //允许强制gc node_args: '--expose-gc', // 是否启用监控模式,默认是false。如果设置成true,当应用程序变动时,pm2会自动重载。这里也可以设置你要监控的文件。 watch: false, // 不用监听的文件 ignore_watch: [ 'logs' ], //out_file: "/dev/stdout", //error_file: "/dev/stderr" // 自定义应用程序的错误日志文件(错误日志文件) error_file: './logs/errCross.log', // 自定义应用程序日志文件(正常日志文件) out_file: './logs/outCross.log', // 指定日志文件的时间格式 log_date_format: 'YYYY-MM-DD HH:mm:ss', } ] module.exports = { apps: config.type == 'cross' ? crossApps : localApps }