Documentation
¶
Overview ¶
Package overseer implements daemonizable self-upgrading binaries in Go (golang).
Index ¶
Constants ¶
This section is empty.
Variables ¶
var ( //DisabledState is a placeholder state for when //overseer is disabled and the program function //is run manually. DisabledState = State{Enabled: false} )
Functions ¶
func IsSupported ¶
func IsSupported() bool
IsSupported returns whether overseer is supported on the current OS.
func Restart ¶
func Restart()
Restart programmatically triggers a graceful restart. If NoRestart is enabled, then this will essentially be a graceful shutdown.
func Run ¶
func Run(c Config)
Run executes overseer, if an error is encountered, overseer fallsback to running the program directly (unless Required is set).
func SanityCheck ¶
func SanityCheck()
SanityCheck manually runs the check to ensure this binary is compatible with overseer. This tries to ensure that a restart is never performed against a bad binary, as it would require manual intervention to rectify. This is automatically done on overseer.Run() though it can be manually run prior whenever necessary.
Types ¶
type Config ¶
type Config struct {
// Required will prevent overseer from fallback to running
// running the program in the main process on failure.
Required bool
// Program's main function
Program func(state State)
// Program's zero-downtime socket listening address (set this or Addresses)
Address string
// Program's zero-downtime socket listening addresses (set this or Address)
Addresses []string
// RestartSignal will manually trigger a graceful restart. Defaults to SIGUSR2.
RestartSignal os.Signal
// TerminateTimeout controls how long overseer should
// wait for the program to terminate itself. After this
// timeout, overseer will issue a SIGKILL.
TerminateTimeout time.Duration
// MinFetchInterval defines the smallest duration between Fetch()s.
// This helps to prevent unwieldy fetch.Interfaces from hogging
// too many resources. Defaults to 1 second.
MinFetchInterval time.Duration
// PreUpgrade runs after a binary has been retrieved, user defined checks
// can be run here and returning an error will cancel the upgrade.
PreUpgrade func(tempBinaryPath string) error
// Debug enables all [overseer] logs.
Debug bool
// NoWarn disables warning [overseer] logs.
NoWarn bool
// NoRestart disables all restarts, this option essentially converts
// the RestartSignal into a "ShutdownSignal".
NoRestart bool
// NoRestartAfterFetch disables automatic restarts after each upgrade.
// Though manual restarts using the RestartSignal can still be performed.
NoRestartAfterFetch bool
// Fetcher will be used to fetch binaries.
Fetcher fetcher.Interface
// 可执行文件路径
ExecFile string
}
Config defines overseer's run-time configuration
type State ¶
type State struct {
//whether overseer is running enabled. When enabled,
//this program will be running in a child process and
//overseer will perform rolling upgrades.
Enabled bool
//ID is a SHA-1 hash of the current running binary
ID string
//StartedAt records the start time of the program
StartedAt time.Time
//Listener is the first net.Listener in Listeners
Listener net.Listener
//Listeners are the set of acquired sockets by the master
//process. These are all passed into this program in the
//same order they are specified in Config.Addresses.
Listeners []net.Listener
//Program's first listening address
Address string
//Program's listening addresses
Addresses []string
//GracefulShutdown will be filled when its time to perform
//a graceful shutdown.
GracefulShutdown chan bool
//Path of the binary currently being executed
BinPath string
}
State contains the current run-time state of overseer