unitbus
Rust SDK for Linux systemd: control units/jobs over the system D-Bus (systemctl-like), run transient one-shot tasks, and query journald logs via journalctl --output=json.
Runtime is Linux-only (systemd + system bus required). The crate is designed to compile on other
platforms, but most operations will fail with Error::BackendUnavailable.
Use cases
- CD/agent: restart a service and wait for a clear outcome (success/failed/timeout)
- Troubleshooting: get unit status + a bounded slice of recent logs on failure
- Deployment tasks: run one-shot commands as transient units and collect exit status
Requirements
- systemd on the system bus (
org.freedesktop.systemd1) - journald access via
journalctl(default backend, feature=journal-cli) - Permissions:
- Unit control typically requires root or PolicyKit authorization.
- Reading logs via
journalctlmay require root orsystemd-journalgroup membership.
Features
- Default:
journal-cli(journald viajournalctl) - Optional:
config(drop-in management) - Optional:
tasks(transient tasks viaStartTransientUnit) - Optional:
tracing(instrumentation viatracing) - Optional:
observe(watch unit failures via D-Bus signals) - Optional:
blocking(synchronous wrappers, powered byasync_io::block_on)
Installation
[]
= "0.1.0"
Quick start
use ;
async
Examples
examples/restart_and_wait.rsexamples/fetch_recent_logs.rsexamples/diagnose_on_failure.rsexamples/run_transient_task.rs(requires--features tasks)examples/observe_unit_failure.rs(requires--features observe)examples/blocking_restart_and_wait.rs(requires--features blocking)