use std::path::Path;
use std::process::Command;
pub enum Daemon {
Systemd,
Unknown,
Upstart,
}
pub fn detect_daemon() -> Result<Daemon, String> {
if Path::new("/run/systemd/system").exists() {
return Ok(Daemon::Systemd);
}
if Path::new("/sbin/initctl").exists() {
let mut cmd = Command::new("/sbin/initctl");
cmd.arg("--version");
let output = cmd.output().map_err(|e| e.to_string())?;
if output.status.success() {
let output_str = String::from_utf8_lossy(&output.stdout).into_owned();
if output_str.contains("upstart") {
return Ok(Daemon::Upstart);
}
}
}
return Ok(Daemon::Unknown);
}