diff --git a/lib/daemon.js b/lib/daemon.js index 0704dc5..4aaafca 100644 --- a/lib/daemon.js +++ b/lib/daemon.js @@ -22,6 +22,7 @@ function startDaemon(argv) { var script = argv.shift(); var nodeArgsStr = argv.shift(); var pidFile = argv.shift(); + var masterHelperScript = argv.shift(); var naughtLog = null; var stderrLog = null; @@ -190,7 +191,7 @@ function startDaemon(argv) { var nodeArgs = splitCmdLine(nodeArgsStr); var stdoutValue = (stdoutBehavior === 'inherit') ? process.stdout : stdoutBehavior; var stderrValue = (stderrBehavior === 'inherit') ? process.stderr : stderrBehavior; - master = spawn(process.execPath, nodeArgs.concat([path.join(__dirname, "master.js"), workerCount, script]).concat(argv), { + master = spawn(process.execPath, nodeArgs.concat([path.join(__dirname, "master.js"), workerCount, masterHelperScript, script]).concat(argv), { env: process.env, stdio: [process.stdin, stdoutValue, stderrValue, 'ipc'], cwd: process.cwd(), diff --git a/lib/main.js b/lib/main.js index d686bed..cf43204 100755 --- a/lib/main.js +++ b/lib/main.js @@ -51,6 +51,7 @@ var cmds = { " --stderr stderr.log\n" + " --max-log-size 10485760\n" + " --cwd " + CWD + "\n" + + " --master \n" + " --daemon-mode true\n" + " --remove-old-ipc false\n" + " --node-args ''", @@ -62,6 +63,7 @@ var cmds = { 'log': 'naught.log', 'stdout': 'stdout.log', 'stderr': 'stderr.log', + 'master': '', 'max-log-size': '10485760', 'cwd': CWD, 'daemon-mode': 'true', @@ -381,7 +383,8 @@ function startScript(options, script, argv){ options['max-log-size'], path.resolve(CWD, script), options['node-args'], - options['pid-file'] + options['pid-file'], + options['master'] ? path.resolve(CWD, options['master']): "" ].concat(argv); if (options['daemon-mode']) { startDaemonChild(args); diff --git a/lib/master.js b/lib/master.js index 8f03790..675b32f 100644 --- a/lib/master.js +++ b/lib/master.js @@ -4,6 +4,11 @@ var Pend = require('pend'); var argv = process.argv.slice(2); var workerCount = parseInt(argv.shift(), 10); +var customMasterScriptFile = argv.shift(); +var customMasterScript; +if (customMasterScriptFile) { + customMasterScript = require(customMasterScriptFile); +} var script = argv.shift(); var own = {}.hasOwnProperty; @@ -164,6 +169,9 @@ function makeWorker(number){ var expectedExit = false; assert(number>=0); worker.on('message', onMessage); + if (customMasterScript && customMasterScript.online) { + customMasterScript.online(worker); + } worker.on('exit', onExit); if (waitingFor == null) { // this code activates when a server crashes during normal operations; @@ -171,9 +179,11 @@ function makeWorker(number){ onceOnline(worker, function(){ setWorkerStatus(worker, 'online'); event('WorkerOnline'); + if (workers.booting.count === 0) event('Ready'); }); } + return worker; function onMessage(message){