1use std::path::Path;
2use std::process::Command;
3
4pub enum Daemon {
6 Systemd,
9 Unknown,
11 Upstart,
13}
14
15pub fn detect_daemon() -> Result<Daemon, String> {
16 if Path::new("/run/systemd/system").exists() {
18 return Ok(Daemon::Systemd);
19 }
20 if Path::new("/sbin/initctl").exists() {
21 let mut cmd = Command::new("/sbin/initctl");
23 cmd.arg("--version");
24 let output = cmd.output().map_err(|e| e.to_string())?;
25 if output.status.success() {
26 let output_str = String::from_utf8_lossy(&output.stdout).into_owned();
27 if output_str.contains("upstart") {
28 return Ok(Daemon::Upstart);
29 }
30 }
31 }
32 return Ok(Daemon::Unknown);
33}