diff --git a/service_manager/src/lib.rs b/service_manager/src/lib.rs index 76dfc0e..a4774dd 100644 --- a/service_manager/src/lib.rs +++ b/service_manager/src/lib.rs @@ -122,22 +122,26 @@ pub fn create_service_manager() -> Result, ServiceManage } #[cfg(target_os = "linux")] { - // Try zinit first (preferred), fall back to systemd if it fails - let socket_path = "/tmp/zinit.sock"; - match ZinitServiceManager::new(socket_path) { - Ok(zinit_manager) => { - log::debug!("Using zinit service manager"); - Ok(Box::new(zinit_manager)) - } - Err(zinit_error) => { - log::warn!( - "Zinit service manager failed, falling back to systemd: {}", - zinit_error - ); - // Fallback to systemd - Ok(Box::new(SystemdServiceManager::new())) + // Try zinit first (preferred), with multiple socket paths, fall back to systemd if all fail + let socket_paths = ["/run/zinit.sock", "/tmp/zinit.sock", "/var/run/zinit.sock"]; + + for socket_path in &socket_paths { + log::debug!("Trying zinit socket: {}", socket_path); + match ZinitServiceManager::new(socket_path) { + Ok(zinit_manager) => { + log::debug!("Using zinit service manager with socket: {}", socket_path); + return Ok(Box::new(zinit_manager)); + } + Err(zinit_error) => { + log::debug!("Zinit socket {} failed: {}", socket_path, zinit_error); + continue; + } } } + + log::warn!("All zinit sockets failed, falling back to systemd"); + // Fallback to systemd if all zinit attempts fail + Ok(Box::new(SystemdServiceManager::new())) } #[cfg(not(any(target_os = "macos", target_os = "linux")))] {