a stateless service runner inspired by runit
Switch branches/tags
Nothing to show
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Failed to load latest commit information.
src
test
.gitignore
LICENSE
Makefile
README
spinsv
spinsv.cabal

README


  SPINSV


    A service runner inspired by runsv.


. background

  A common need encountered when running services on a unix system is
  to pipe the output of one service into the input of another, (often
  a log service such as `svlogd`). This looks something like this:

      #!/bin/sh

      service | log-service

  There are several problems with this approach, however:

    * There is no monitoring: if either of the services die,
      they aren't restarted.
    * It's hard to inspect the state of the process pair,
      especially if it goes down.
    * Even if the script is restarted when either of the services
      fails, this means the log service will cause a restart of the
      other service if it dies.
    * There is no single entry point to managing the process pair.

  spinsv aims to solve these shortcomings by monitoring the processes
  and providing a TCP console to access or change the process state.

. rationale

  To have a completely stateless[1] service runner configurable via
  the command line.

  1. spinsv doesn't need file system access for configuration
     or operation.

. building

  $ make

. running

  $ spind --port 80

  For spinsv, see 'spinsv --help'

. example

  Start the spind daemon on a remote host

    $ ssh 10.0.1.32
    $ spinsv --in.cmd  spind      \
             --in.arg '--port=80' \
             --out.cmd svlogd     \
             --out.arg /var/run/spind

  Spawn a service via spind's HTTP interface. spinsv will open
  a TCP control socket on port 9898.

    $ curl -X POST 10.0.1.32/jobs -d \
        '{"service": {"cmd": "redis-server", "args": []},
          "logger":  {"cmd": "svlogd", "args": ["/var/run/redis/log"]},
          "port":    9898}'

  The service runs under spinsv, we can verify that it is running:

    $ netcat 10.0.1.32 9898
    > status
    up 0 0
    > q

    $ redis-cli -h 10.0.1.32 info
    redis_version:2.6.11
    ...

. copyright

  (C) 2012 Alexis Sellier <alexis@cloudhead.io>