Service Manager
This crate provides a unified interface for managing system services across different platforms.
It abstracts the underlying service management system (like launchctl on macOS or zinit on Linux),
allowing you to create, start, stop, remove, and monitor services with a consistent API.
The service lifecycle is managed in two distinct steps:
create: Creates the service definition on the system (e.g., writes a.plistfile on macOS).start: Starts a service that has already been created.
This separation ensures that service management is more explicit and robust.
Features
- A 
ServiceManagertrait defining a common interface for service operations. - Platform-specific implementations for:
- macOS (
launchctl) - Linux (
zinit) (via thezinitfeature flag) 
 - macOS (
 - A factory function 
create_service_managerthat returns the appropriate manager for the current platform. 
Usage
Add this to your Cargo.toml:
[dependencies]
sal-service-manager = { path = "./", features = ["zinit"] }
Here is an example of how to use the ServiceManager:
use sal_service_manager::{create_service_manager, ServiceConfig, ServiceManager};
fn main() -> Result<(), Box<dyn std::error::Error>> {
    // On linux, this will default to zinit. On macos, to launchctl.
    let service_manager = create_service_manager(None)?;
    let config = ServiceConfig {
        name: "my-service".to_string(),
        binary_path: "/usr/local/bin/my-service-executable".to_string(),
        args: vec!["--config".to_string(), "/etc/my-service.conf".to_string()],
        working_directory: Some("/var/tmp".to_string()),
        environment: None,
        auto_restart: true,
    };
    // Create the service definition
    service_manager.create(&config)?;
    println!("Service 'my-service' created.");
    // Start the service
    service_manager.start("my-service")?;
    println!("Service 'my-service' started.");
    // Get the status of the service
    let status = service_manager.status("my-service")?;
    println!("Service status: {:?}", status);
    // Stop the service
    service_manager.stop("my-service")?;
    println!("Service 'my-service' stopped.");
    // Remove the service
    service_manager.remove("my-service")?;
    println!("Service 'my-service' removed.");
    Ok(())
}