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
- Host: GitHub
- URL: https://github.com/mopemope/firestarter
- Owner: mopemope
- Created: 2018-08-08T14:31:53.000Z (over 7 years ago)
- Default Branch: master
- Last Pushed: 2023-06-14T16:08:24.000Z (over 2 years ago)
- Last Synced: 2025-03-27T22:22:04.262Z (9 months ago)
- Topics: process-manager, rust, socket-server
- Language: Rust
- Homepage:
- Size: 332 KB
- Stars: 68
- Watchers: 5
- Forks: 4
- Open Issues: 11
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# Firestarter: A process and shared socket manager
[](https://crates.io/crates/firestarter)
[](https://www.patreon.com/mopemope)
[](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