diff options
Diffstat (limited to 'node_modules/forever/bin/monitor')
| -rwxr-xr-x | node_modules/forever/bin/monitor | 83 |
1 files changed, 83 insertions, 0 deletions
diff --git a/node_modules/forever/bin/monitor b/node_modules/forever/bin/monitor new file mode 100755 index 0000000..2bd9fd9 --- /dev/null +++ b/node_modules/forever/bin/monitor @@ -0,0 +1,83 @@ +var fs = require('fs'), + path = require('path'), + forever = require(path.resolve(__dirname, '..', 'lib', 'forever')), + started; + +// +// ### @function (file, pid) +// #### @file {string} Location of the pid file. +// #### @pid {number} pid to write to disk. +// Write the pidFile to disk for later use +// +function writePid(file, pid) { + fs.writeFileSync(file, pid, 'utf8'); +} + +// +// ### @function start (options) +// #### @options {Object} Options for the `forever.Monitor` instance. +// Starts the child process and disconnects from the IPC channel. +// +function start(options) { + var script = process.argv[2], + monitor = new forever.Monitor(script, options); + + forever.logEvents(monitor); + monitor.start(); + + monitor.on('start', function () { + // + // This starts an nssocket server, which the forever CLI uses to + // communicate with this monitor process after it's detached. + // Without this, `forever list` won't show the process, even though it + // would still be running in the background unaffected. + // + forever.startServer(monitor); + + // + // Disconnect the IPC channel, letting this monitor's parent process know + // that the child has started successfully. + // + process.disconnect(); + + // + // Write the pidFile to disk + // + writePid(options.pidFile, monitor.child.pid); + }); + + // + // When the monitor restarts update the pid in the pidFile + // + monitor.on('restart', function () { + writePid(options.pidFile, monitor.child.pid); + }); + + + // + // When the monitor stops or exits, remove the pid and log files + // + function cleanUp(){ + try { + fs.unlinkSync(options.pidFile); + } + catch(e){} + } + monitor.on('stop', cleanUp); + monitor.on('exit', cleanUp); +} + +// +// When we receive the first message from the parent process, start +// an instance of `forever.Monitor` with the options supplied. +// +process.on('message', function (data) { + // + // TODO: Find out if this data will ever get split into two message events. + // + var options = JSON.parse(data.toString()); + if (!started) { + started = true; + start(options); + } +});
\ No newline at end of file |
