An open API service indexing awesome lists of open source software.

https://github.com/mopemope/firestarter

Firestarter: A process and shared socket manager
https://github.com/mopemope/firestarter

process-manager rust socket-server

Last synced: 9 months ago
JSON representation

Firestarter: A process and shared socket manager

Awesome Lists containing this project

README

          

# Firestarter: A process and shared socket manager

[![crates.io](https://img.shields.io/crates/v/firestarter.svg)](https://crates.io/crates/firestarter)
[![Patreon](https://img.shields.io/badge/patreon-become%20a%20patron-red.svg)](https://www.patreon.com/mopemope)
[![Build Status](https://travis-ci.org/mopemope/firestarter.svg?branch=master)](https://travis-ci.org/mopemope/firestarter)

Firestarter is a simple process and shared socket manager, it is designed like [circus][] and [einhorn][], but lightweight and faster.

Firestarter can manage groups of processes and shared sockets like [circus][]. And like [einhorn][] we support manual ack.
And you can control Firestarter daemon, such as increasing worker process from ctrl command.

Firestarter shares sockets using the `systemd socket passing protocol` (LISTEN_FDS).

Firestarter uses explicit configuration files rather than complex command line options.

## Features

* Easy install
* Fast and saving memory
* Using explicit configuration file
* Support control command like [circus][]
* Support ack like [einhorn][]
* Execute upgrader program

## Installation

You can get `firestarter` by installing it with cargo:

```sh
$ cargo install firestarter
```

## Usage

Firestarter is process and shared socket manager. Run `firestarter -h` to see detailed usage.

```
firestarter
process and shared socket manager

USAGE:
firestarter

FLAGS:
-h, --help Prints help information
-V, --version Prints version information

SUBCOMMANDS:
ctrl Run control client
help Prints this message or the help of the given subcommand(s)
list Show worker names
run Run daemon
status Show worker status
stop Stop daemon
```

Example

```sh
$ firestarter run --config misc/config.toml
```

The configuration file uses toml. An example is below.

```toml
[worker1] # set worker group name.

# set to commands with their arguments that are executed when this worker is started.
# exec_start = "./demo/target/debug/demo"
exec_start = "/usr/bin/emacs --fg-daemon"

# set to commands to execute to stop the service started via exec_start.
# if you do not set it, sigterm will be sent to the exec_start process.
# note that upgrade ack does not use this command.
exec_stop = "/usr/bin/emacsclient --eval (kill-emacs)"

# set the number of startup processes.
numprocesses = 1

# set working directory.
# working_directory = "/tmp".

# set restart policy. default is none.
# none: not restart process.
# on-failure: restart the process if it is not completed normally.
# always: restart the process whenever you exit.
restart = "on-failure"

# set the seconds to delay the startup of the process.
# warmup_delay = 1

# start the process immediately without starting the process when connecting the client socket.
start_immediate = true

# set shared socket addresses.
# it also support unix domain socket. (e.g.: /tmp/foo.sock)
socket_address = ["127.0.0.1:4000", "127.0.0.1:4001"]

# set processes environment.
environments=["TEST_A=XXXX", "TEST_B=YYYY"]

# set upgrade ack type. this is similar to einhorn 's ACKs. timer is default.
# timer: it will terminate the old process after a certain time (sec).
# manual: send ack manually. For details, refer to einhorn's manual ack document
# none: no ack. simple stop and start
ack = "manual"

# set timer ack time in seconds. default 1sec.
# ack_timeout = 1

# set ack signal. default is SIGUSR2.
# ack_signal = "SIGUSR2"

# set uid.
# uid = 1000

# set gid.
# gid = 10

# set stdout to file.
# size and timed rotate supported.
# the format is below.
# size:::
# time:::::
# the type of timezeone for rotate,the list of possible values is below.
#‘U’UTC
#‘L’Local
# the type of interval,the list of possible values is below.
#‘S’Seconds
#‘M’Minutes
#‘H’Hours
#‘D’Days
#
# exmple
# stdout_log = "size:10240:5:/tmp/web1_out.log"
# it rolls over in 3 days and keeps 5 backups.
# stdout_log = "time:3:D:U:7:/tmp/web1_out.log"

# set stderr to file.
# it is the same as stdout.
# stderr_log = "size:10240:5:/tmp/web1_err.log"

# set process live check configuration.
# we will check the existence of the process (experimental).
# the process needs to periodically update the mtime of the file passed in environment variable FIRESTARTER_WATCH_FILE.
# the monitoring process kills the process when the mtime update interval exceeds the threshold. this is the same process as gunicorn's worker notify.
# the unit is seconds, and the default value is 0. (disable live check)
# live_check_timeout = 60

# set auto upgrade.
# it will send upgrade command when their command file is modified.
# it does the same processing as circus.plugins.CommandReloader.
# auto_upgrade = false

# set upgrader program.
# set to the upgrader command.
# run upgrade only when the upgrader command terminates normally.
# upgrader = "/a/b/upgrader --config abc"

# set upgrade timing.
# execute the upgrader command for each specified seconds.
# if not set, execute the upgrade command when executing the upgrade ctrl command.
# upgrader_active_sec=10
# upgrader_timeout=60
```

## Control command

Firestarter also provides a client that controls the running daemon.

For example, you can check the status with the following command.

```sh
$ firestarter ctrl worker1 status
send ctrl command [status] to [worker1] worker
[worker1] active
processes [24170]
time 00:00:06
```

For details, please refer to the help `firestarter ctrl -h`.

## Contributing

Contributions are extremely welcome! Please push PR to `dev` branch.

[circus]: https://circus.readthedocs.io/
[einhorn]: https://github.com/stripe/einhorn