Expand description
A library for Generate, installing, and managing systemd services on Linux for Rust binary.
This crate provides a fluent builder (ServiceConfig) to define a systemd
service unit and a SystemdService struct to handle the generation,
installation, and management (start, enable) of that service.
§⚠️ Important: Requires Root Privileges
Most operations in this crate (writing to /etc/systemd/system,
running systemctl commands) require root privileges to execute.
The methods will return an Error::Permission if run by a non-root user.
§Example Usage
use systemd_service::{ServiceConfig, SystemdService, Error};
fn setup_my_service() -> Result<(), Error> {
// 1. Define the service configuration using the builder
let config = ServiceConfig::new(
"myapp",
"/usr/local/bin/myapp --run",
"My Application Service",
)
.user("myapp-user")
.group("myapp-group")
.working_directory("/var/lib/myapp")
.after(vec!["network.target".to_string()])
.environment(vec![
("RUST_LOG".to_string(), "info".to_string()),
("PORT".to_string(), "8080".to_string()),
])
.restart("on-failure")
.restart_sec(10);
// 2. Create the service manager
let service = SystemdService::new(config);
// 3. Install, enable, and reload systemd
// This requires root privileges!
service.install_and_enable()?;
// 4. Start the service
// This also requires root privileges!
service.start()?;
println!("Service 'myapp' installed and started successfully.");
Ok(())
}Structs§
- Service
Config - Represents the configuration for a systemd service.
- Systemd
Service - Manages a systemd service based on a
ServiceConfig.
Enums§
Functions§
- is_root
- validate_
root_ privileges - Checks for root privileges and returns an error if not root.