https://github.com/cloudflare/shellflip
Graceful process restarts in Rust
https://github.com/cloudflare/shellflip
graceful-shutdown process restart rust server systemd
Last synced: about 2 months ago
JSON representation
Graceful process restarts in Rust
- Host: GitHub
- URL: https://github.com/cloudflare/shellflip
- Owner: cloudflare
- License: bsd-3-clause
- Created: 2023-03-31T09:27:18.000Z (about 2 years ago)
- Default Branch: main
- Last Pushed: 2025-03-27T12:26:29.000Z (3 months ago)
- Last Synced: 2025-05-09T09:47:35.740Z (about 2 months ago)
- Topics: graceful-shutdown, process, restart, rust, server, systemd
- Language: Rust
- Homepage: https://blog.cloudflare.com/oxy-the-journey-of-graceful-restarts/
- Size: 52.7 KB
- Stars: 278
- Watchers: 6
- Forks: 10
- Open Issues: 3
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# shellflip
[](https://crates.io/crates/shellflip)
[](https://docs.rs/shellflip)Graceful process restarts in Rust.
This crate facilitates upgrading or reconfiguring a service without disrupting existing connections.
This is achieved by forking the process and communicating a small amount of state between the old
and new processes; once the new process has started successfully the old process may terminate.This crate has the following goals:
* No old code keeps running after a successful upgrade (and inevitable shutdown of the old process)
* The new process has a grace period for performing initialisation
* Crashing during initialisation is OK
* Only a single upgrade is ever run in parallel
* It is possible for the user/process initiating the upgrade to know if the upgrade succeededInspired by the [tableflip](https://github.com/cloudflare/tableflip) go package but not a direct
replacement.# Using the library
A full example is given in the [restarter example service](examples/restarter.rs).
The main struct of interest is `RestartConfig` which has methods for detecting or initiating
restart. For shutting down a restarted process, the `ShutdownCoordinator` provides the means for
both signalling a shutdown event to spawned tasks, and awaiting their completion.## License
BSD licensed. See the [LICENSE](LICENSE) file for details.
🦀ノ( º _ ºノ) - respect crables!