starter

package module
v0.0.0-...-1fa9a78 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Apr 13, 2021 License: MIT Imports: 14 Imported by: 0

README

server-starter

Go port of start_server utility (a.k.a. Server::Starter).

Build Status

GoDoc

DESCRIPTION

note: this description is almost entirely taken from the original Server::Starter module

The start_server utility is a superdaemon for hot-deploying server programs.

It is often a pain to write a server program that supports graceful restarts, with no resource leaks. Server::Starter solves the problem by splitting the task into two: start_server works as a superdaemon that binds to zero or more TCP ports or unix sockets, and repeatedly spawns the server program that actually handles the necessary tasks (for example, responding to incoming connections). The spawned server programs under start_server call accept(2) and handle the requests.

To gracefully restart the server program, send SIGHUP to the superdaemon. The superdaemon spawns a new server program, and if (and only if) it starts up successfully, sends SIGTERM to the old server program.

By using start_server it is much easier to write a hot-deployable server. Following are the only requirements a server program to be run under start_server should conform to:

  • receive file descriptors to listen to through an environment variable - perform a graceful shutdown when receiving SIGTERM

Many PSGI servers support this. If you want your Go program to support it, you can look under the listener directory for an implementation that also fills the net.Listener interface.

INSTALLATION

go get github.com/lestrrat-go/server-starter/cmd/start_server

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func SigFromName

func SigFromName(n string) os.Signal

SigFromName returns the signal corresponding to the given signal name string. If the given name string is not defined, it returns nil.

Types

type Config

type Config interface {
	Args() []string
	Command() string
	Dir() string             // Directory to chdir to before executing the command
	Interval() time.Duration // Time between checks for liveness
	PidFile() string
	Ports() []string         // Ports to bind to (addr:port or port, so it's a string)
	Paths() []string         // Paths (UNIX domain socket) to bind to
	SignalOnHUP() os.Signal  // Signal to send when HUP is received
	SignalOnTERM() os.Signal // Signal to send when TERM is received
	StatusFile() string
}

type Starter

type Starter struct {
	// contains filtered or unexported fields
}

func NewStarter

func NewStarter(c Config) (*Starter, error)

NewStarter creates a new Starter object. Config parameter may NOT be nil, as `Ports` and/or `Paths`, and `Command` are required

func (*Starter) Run

func (s *Starter) Run() error

func (*Starter) StartWorker

func (s *Starter) StartWorker(sigCh chan os.Signal, ch chan processState) *os.Process

StartWorker starts the actual command.

func (Starter) Stop

func (s Starter) Stop()

func (*Starter) Teardown

func (s *Starter) Teardown() error

type WorkerState

type WorkerState int
const (
	WorkerStarted WorkerState = iota
	ErrFailedToStart
)

Directories

Path Synopsis
cmd

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL