Skip to content

Instantly share code, notes, and snippets.

@tnantoka
Created October 11, 2011 08:09
Show Gist options
  • Save tnantoka/1277539 to your computer and use it in GitHub Desktop.
Save tnantoka/1277539 to your computer and use it in GitHub Desktop.
Simple command line wrapper for forever.js
#!/usr/bin/env node
/* Simple wrapper for forever.js */
var exec = require('child_process').exec;
var SCRIPT_NAME = 'app.js';
//var FOREVER = './node_modules/forever/bin/forever'; // installed locally
var FOREVER = 'forever'; // installed globally
var dir = __dirname;
var script = '"' + dir + '/' + SCRIPT_NAME + '"';
var date = dateString();
switch(process.argv[2]) {
case 'start':
var command = FOREVER + ' start -p ' + dir +
' -l logs/forever_' + date + '.log' +
' -o ' + dir + '/logs/out_' + date + '.log' +
' -e ' + dir + '/logs/err_' + date + '.log ' +
script;
console.log('$ ' + command);
exec(command, function (err, stdout, stderr) {
if (err) {
throw err;
}
if (stdout) {
console.log(stdout);
}
if (stderr) {
console.error(stderr);
}
});
break;
case 'stop':
var command = FOREVER + ' stop -p ' + dir + ' ' + script;
console.log('$ ' + command);
exec(command, function (err, stdout, stderr) {
if (err) {
throw err;
}
if(stdout) {
console.log(stdout);
}
if (stderr) {
console.error(stderr);
}
});
break;
// doesn't work
case 'list':
var command = FOREVER + ' list -p ' + dir + ' ' + script;
console.log('$ ' + command);
exec(command, function (err, stdout, stderr) {
if (err) {
throw err;
}
if(stdout) {
console.log(stdout);
}
if (stderr) {
console.error(stderr);
}
});
break;
// delete all log & pid file
case 'clear':
var command = 'rm -rf ' + dir + '/logs/* ' + dir + '/pids/* ' + dir + '/sock';
console.log('$ ' + command);
exec(command, function (err, stdout, stderr) {
if (err) {
throw err;
}
if(stdout) {
console.log(stdout);
}
if (stderr) {
console.error(stderr);
}
});
break;
// show help
case 'help':
case '-h':
default:
console.log('# Control "' + SCRIPT_NAME + '" with forever');
console.log('## usage');
console.log(' $ npm install -g forever');
console.log(' $ node eizoku.js <command>');
console.log('## commands');
console.log(' start: start "' + SCRIPT_NAME + '"');
console.log(' stop: stop "' + SCRIPT_NAME + '"');
// console.log(' list: list "' + SCRIPT_NAME + '"');
console.log(' clear: delete logs/* pids/*');
console.log(' help: show this message');
break;
}
function fillZero(s, n) {
var zero = '';
for (var i = 0; i < n; i++) {
zero += '0';
}
return (zero + s).slice(-n);
}
function dateString() {
var date = new Date();
var year = date.getFullYear();
var month = fillZero((date.getMonth() + 1), 2);
var day = fillZero(date.getDate(), 2);
var hours = fillZero(date.getHours(), 2);
var minutes = fillZero(date.getMinutes(), 2);
var seconds = fillZero(date.getSeconds(), 2);
return year + '' + month + '' + day + '' + hours + '' + minutes + '' + seconds;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment