From 2bd257245a27bff2064e5e57c2e60211b27050ec Mon Sep 17 00:00:00 2001 From: Josh Sherman Date: Tue, 25 Nov 2014 23:47:04 -0500 Subject: [PATCH] First actual commit --- README.md | 37 ++++++++++++++++++++++++++++++++++--- index.js | 24 ++++++++++++++++++++++++ package.json | 28 ++++++++++++++++++++++++++++ 3 files changed, 86 insertions(+), 3 deletions(-) create mode 100644 index.js create mode 100644 package.json diff --git a/README.md b/README.md index d204845..04e4aa2 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,35 @@ -simple-pid -========== +# simple-pid -Stupid simple PID management +Stupid simple PID management. + +## Why another PID module? + +I know, there’s already quite a few other PID modules out there but for me they +all seemed to fall into the poorly documented or the overly complex categories. +I just wanted a way to see if a process was already running and if not, run +the damn code. I also wanted to do this in a very simple fashion, by way of a +callback. And thus, I give you `simple-pid`. + +## Usage + +```javascript +var pid = require('simple-pid'); + +pid.lock('process-name', function() { + // All your awesome logic +}); +``` + +## But what’s it do? + +Great question! All it does is checks to see if a PID file was already created, +based on the passed process name. If the PID inside of the PID file is still +active, the callback is not executed. If it isn’t running (or the PID file +simply doesn't exist) the PID file will be created (with the current PID) and +the code in the callback will be executed. + +## Any gotchas? + +You know it! Because this module writes to the `/var/run` directory it requires +write access to that directory. This is best accomplished by running your script +as root or by way of `sudo`. diff --git a/index.js b/index.js new file mode 100644 index 0000000..9669deb --- /dev/null +++ b/index.js @@ -0,0 +1,24 @@ +var fs = require('fs-extra'); +var running = require('running'); + +module.exports = { + lock: function(name, callback) { + var filename = '/var/run/' + name + '.pid'; + + // Checks if PID file exists + if (fs.existsSync(filename)) { + // Checks if the PID is still active + var pid = fs.readFileSync(filename, 'utf8'); + + if (running(pid)) { + console.log('PID ' + pid + ' found in ' + filename + ' is running.'); + process.exit(1); + } + } + + // Writes the PID + fs.writeFileSync(filename, process.pid); + + callback && callback(); + } +}; diff --git a/package.json b/package.json new file mode 100644 index 0000000..8b99113 --- /dev/null +++ b/package.json @@ -0,0 +1,28 @@ +{ + "name": "simple-pid", + "version": "1.0.0", + "description": "Stupid simple PID management", + "main": "index.js", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "repository": { + "type": "git", + "url": "https://github.com/fetchlogic/simple-pid.git" + }, + "keywords": [ + "pid", + "process", + "management" + ], + "author": "Josh Sherman (http://joshtronic.com/)", + "license": "MIT", + "bugs": { + "url": "https://github.com/fetchlogic/simple-pid/issues" + }, + "homepage": "https://github.com/fetchlogic/simple-pid", + "dependencies": { + "fs-extra": "^0.12.0", + "running": "0.0.1" + } +}