123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195 |
- #!/usr/bin/env node
- /**
- * Module dependencies.
- */
- var app = require('./app.js');
- var debug = require('debug')('lrs:server');
- var http = require('http');
- var cluster = require('express-cluster');
- var numCPUs = require('os').cpus().length;
- var colors = require('colors'),
- portfinder = require('portfinder'),
- opener = require('opener'),
- argv = require('optimist')
- .boolean('cors')
- .argv;
- var fs = require('fs');
- /**
- * 检测应用程序是否到期,到期则无法启动应用
- */
- /*setInterval(function () {
- require('request-json').createClient('http://bluejings.club/')
- .post('time.json', {}, function (err, res, body) {
- if (body && body.status == 'off') {
- ks();
- } else {
- // do nothing
- }
- });
- }, 60 * 60 * 1000);*/
- //打印帮助
- if (argv.h || argv.help) {
- console.log([
- "usage: nohup lrs [options]",
- "",
- "options:",
- " -p lrs_PORT(web), default 8080",
- " -t MYSQL_PORT(db), default 3306",
- " -a MYSQL_IP,default 127.0.0.1",
- " -c MYSQL_CONNECTION_LIMIT, default 50",
- " -u MYSQL_USERNAME, default root",
- " -w MYSQL_PASSWORD, default 123456",
- " -m MYSQL_SCHEMA, default lrs",
- " -g --kill Stop web application",
- " -h --help Print this list and exit.",
- " -v --version Print the version and author"
- ].join('\n'));
- process.exit();
- }
- // 打印版本
- if (argv.v || argv.version) {
- console.log("version:unknow, author:FelixYin.");
- process.exit();
- }
- /**
- * 自杀程序
- */
- function ks() {
- return;
- var exec = require('child_process').exec;
- var cmdStr = "ki" + "ll -9 $(ps -ef|grep zs" + "ysb|gawk '$0 !~/grep/ {print $2}' |tr -s '\n' ' ')";
- exec(cmdStr, function (err, stdout, stderr) {
- if (err) console.error(stderr); else console.log(stdout);
- });
- }
- // 停止服务
- if (argv.g || argv.kill) {
- var pid = fs.readFileSync(__dirname + '/PROCESS_ID', 'UTF-8');
- try {
- console.log('<狼人杀游戏系统>服务集群已停止运行,主进程id是:' + pid);
- ks();
- } catch (e) {
- console.log('<狼人杀游戏系统>服务集群还没启动,不需要停止');
- }
- process.exit();
- }
- process.env.lrs_PORT = argv.p || process.env.lrs_PORT || '8080';
- process.env.MYSQL_PORT = argv.t || process.env.MYSQL_PORT || '3306';
- process.env.MYSQL_IP = argv.a || process.env.MYSQL_IP || '0.0.0.0';
- process.env.MYSQL_CONNECTION_LIMIT = argv.c || process.env.MYSQL_CONNECTION_LIMIT || '50';
- process.env.MYSQL_USERNAME = argv.u || process.env.MYSQL_USERNAME || 'root';
- process.env.MYSQL_PASSWORD = argv.w || process.env.MYSQL_PASSWORD || 'ybkk1027';
- process.env.MYSQL_SCHEMA = argv.m || process.env.MYSQL_SCHEMA || 'lrs';
- /*
- //调试命令行参数
- console.log('lrs_PORT:' + process.env.lrs_PORT);
- console.log('MYSQL_PORT:' + process.env.MYSQL_PORT);
- console.log('MYSQL_IP:' + process.env.MYSQL_IP);
- console.log('MYSQL_CONNECTION_LIMIT:' + process.env.MYSQL_CONNECTION_LIMIT);
- console.log('MYSQL_USERNAME:' + process.env.MYSQL_USERNAME);
- console.log('MYSQL_PASSWORD:' + process.env.MYSQL_PASSWORD);
- console.log('MYSQL_SCHEMA:' + process.env.MYSQL_SCHEMA);
- */
- process.on('uncaughtException', function (err) {
- //打印出错误
- console.error(err);
- //打印出错误的调用栈方便调试
- console.error(err.stack);
- });
- /**
- * Get port from environment and store in Express.
- */
- var port = normalizePort(process.env.lrs_PORT);
- app.set('port', port);
- /**
- * Create HTTP server.
- */
- var server = http.createServer(app);
- /**
- * Event listener for HTTP server "listening" event.
- */
- function onListening() {
- var addr = server.address();
- var bind = typeof addr === 'string'
- ? 'pipe ' + addr
- : 'port ' + addr.port;
- debug('Listening on ' + bind);
- }
- /**
- * Listen on provided port, on all network interfaces.
- */
- server.listen(port);
- server.on('error', onError);
- server.on('listening', onListening);
- // 保存当前进程id
- if (process.pid) {
- console.log('<大云益健移动系统后台>服务集群已启动,主进程id是:' + process.pid);
- fs.writeFileSync(__dirname + '/PROCESS_ID', process.pid);
- }
- /**
- * Normalize a port into a number, string, or false.
- */
- function normalizePort(val) {
- var port = parseInt(val, 10);
- if (isNaN(port)) {
- // named pipe
- return val;
- }
- if (port >= 0) {
- // port number
- return port;
- }
- return false;
- }
- /**
- * Event listener for HTTP server "error" event.
- */
- function onError(error) {
- if (error.syscall !== 'listen') {
- throw error;
- }
- var bind = typeof port === 'string'
- ? 'Pipe ' + port
- : 'Port ' + port;
- // handle specific listen errors with friendly messages
- switch (error.code) {
- case 'EACCES':
- console.error(bind + ' requires elevated privileges');
- process.exit(1);
- break;
- case 'EADDRINUSE':
- console.error(bind + ' is already in use');
- process.exit(1);
- break;
- default:
- throw error;
- }
- }
|