solti_exec/lib.rs
1//! # solti-exec - task execution backends.
2//!
3//! Provides concrete [`Runner`](solti_runner::Runner) implementations that turn [`TaskSpec`](solti_model::TaskSpec)
4//! into running OS processes (and, in the future, WASM / container backends).
5//!
6//! ## Feature flags
7//!
8//! | Flag | What it enables |
9//! |---------------|-------------------------------------------------------------|
10//! | `subprocess` | [`subprocess`] module - OS process runner with sandboxing |
11//!
12//! ## Quick start
13//!
14//! ```text
15//! use solti_exec::subprocess::*;
16//!
17//! let mut router = RunnerRouter::new();
18//! register_subprocess_runner(&mut router, "default")?;
19//!
20//! // with sandboxing
21//! let backend = SubprocessBackendConfig::new()
22//! .with_rlimits(RlimitConfig { .. })
23//! .with_cgroups(CgroupLimits { .. })
24//! .with_security(SecurityConfig { .. });
25//! register_subprocess_runner_with_backend(&mut router, "secure", backend)?;
26//! ```
27//!
28//! ## Also
29//!
30//! - [`solti_runner::Runner`] trait implemented by backends in this crate.
31//! - [`solti_model::TaskKind`] determines which backend handles the task.
32//! - [`solti_runner::RunnerRouter`] routes tasks to registered runners.
33
34mod error;
35pub use error::ExecError;
36
37mod metrics;
38
39#[cfg(feature = "subprocess")]
40pub use utils::{CgroupLimits, CpuMax, LinuxCapability, RlimitConfig, SecurityConfig};
41#[cfg(feature = "subprocess")]
42pub mod subprocess;
43#[cfg(feature = "subprocess")]
44pub(crate) mod utils;