summaryrefslogtreecommitdiff
path: root/node_modules/forever/bin
diff options
context:
space:
mode:
Diffstat (limited to 'node_modules/forever/bin')
-rwxr-xr-xnode_modules/forever/bin/forever3
-rwxr-xr-xnode_modules/forever/bin/foreverd4
-rwxr-xr-xnode_modules/forever/bin/monitor83
3 files changed, 90 insertions, 0 deletions
diff --git a/node_modules/forever/bin/forever b/node_modules/forever/bin/forever
new file mode 100755
index 0000000..5190d32
--- /dev/null
+++ b/node_modules/forever/bin/forever
@@ -0,0 +1,3 @@
+#!/usr/bin/env node
+
+require('../lib/forever').cli.start();
diff --git a/node_modules/forever/bin/foreverd b/node_modules/forever/bin/foreverd
new file mode 100755
index 0000000..e7015ba
--- /dev/null
+++ b/node_modules/forever/bin/foreverd
@@ -0,0 +1,4 @@
+#!/usr/bin/env node
+
+require('../lib/forever/service/cli').startCLI();
+
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