npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

satan

v0.6.0

Published

Bring daemons to life or destroy them forever. OSX/Linux/Windows.

Downloads

25

Readme

Satan

Make daemons out of your processes at will. Then destroy them forever.

Example

var satan = require('satan');

var opts = {
  bin  : '/usr/bin/node',                        // full path to bin
  user : 'deploy',                               // user to run the service as
  args : 'app.js -p 8001',                       // command line arguments
  path : '/home/deploy/apps/secret-project',     // working directory
  key  : 'secret-project'                        // for identifying the service
}

satan.create(opts, function(err) {
  if (err)
    return console.log('Failed to create daemon.')

  console.log('Success! Launching process...');
  satan.start(opts.key, function(err) {
    console.log(err || 'Running.')
  });
})

You can create a daemon out of any process -- not necessarily a Node.js app. Just point the bin to where it should.

var opts = {
  bin  : '/path/to/my/daemon.py',
  key  : 'com.example.daemon',
  user : 'nobody'
}

satan.create(opts, function(err) {
  console.log(err || 'Let me do your bidding, master.');
});

All arguments are optional, except for bin and key. In Linux, you can also pass both name and desc options, which will be inserted in the generated init script. Satan supports sysinitv, upstart and systemd and automatically detects which one your Linux uses.

var opts = {
  bin  : 'puma -p 8000',
  path : '/home/tomas/apps/awesome',
  key  : 'awesome-app',
  name : 'Awesome App',
  desc : 'My awesome app.'
}

satan.ensure_created(opts, function(err) {
  // in this case, satan will not return an error if the service already exists.
});

Windows

To daemonize your processes in Windows, Satan uses a nitfy tool called nssm (i.e. the 'non sucking service manager') to spawn and keep your process up and running. So, when calling create, Satan basically makes a copy of the nssm.exe binary, and creates a new system service that points to it.

By default the nssm.exe binary is copied to the same path as your bin, but you can use a custom location for the nssm.exe binary by passing a daemon_path option, like this:

var opts = {
  bin  : 'npm start',
  path : 'C:\\Users\\tomas\\apps\\static-http'
  key  : 'StaticHTTP',
  name : 'Static HTTP Server',
  desc : 'Serves static files from my Public folder to local network users.',
  daemon_path : path.join(process.env.WINDIR, 'system32')
}

If you also want to use a custom name for .exe, just include a daemon_name option.

opts.daemon_name = 'awesome-daemon.exe';

Now, if you already have a Windows Service executable, and don't need to use the nssm.exe method, set the daemon_path option to null or false when creating the daemon.

var opts = {
  daemon_path : null,
  bin  : 'C:\\IBN\\Profiles\\QRDX\\corpsvc.exe',
  key  : 'CorporateService',
  name : 'Very Corporate Service',
  desc : 'Reminds users that they are part of a very corporate environment.'
}

satan.create(opts, cb);

API

satan.create(opts, cb)

Creates a new daemon. Returns an error if it already exists.

satan.ensure_created(opts, cb)

Creates a new daemon. Does not return an error if it exists.

satan.start(daemon_key, cb)

Stats a daemon. Uses the daemon's key for identifying it. Callsback an error if it failed.

satan.stop(daemon_key, cb)

Stops a daemon. Uses the daemon's key for identifying it. Callsback an error if it failed.

satan.destroy(daemon_key, cb)

Destroys an existing daemon. Returns an error if not found.

satan.ensure_destroyed(daemon_key, cb)

Destroys an existing daemon. Does not return an error if not found.

Options

On creation:

- `key`: Identifier for the service. OSX users should use the `com.example.app` notation.
- `bin`: Absolute or relative path to the executable. If relative, make sure to include the `path` option.
- `args`: Additional arguments to pass to the bin. Optional. Not an array, just a string.
- `path`: Absolute path to set as the current working directory before calling the bin. Somewhat optional (read the `bin` part above).
- `name`: More descriptive name for your daemon, to be included in the init script or the Windows Services list.
- `desc`: Even more descriptive text for your daemon. Not necessary, but makes it look nicer.

Windows-only options:

- daemon_path: Custom path to use for the `nssm.exe` binary  when setting up your daemon. If `null` or `false`, Satan assumes your bin can run as a Windows Service and will not copy any additional binaries.
- daemon_name: Custom name to use for the `nssm.exe` executable. Optional.

There are a slew of other options available for fine-tuning OSX and Linux daemons. Take a look at the lib/builder.js script for more satanic tweaks.

Final part

Written by Tomás Pollak. (c) Fork, Ltd. MIT License.