feat: Improve zinit service manager fallback

- Try multiple socket paths for zinit before falling back to systemd.
- This improves the robustness of the service manager selection,
  handling cases where the zinit socket path might vary.
This commit is contained in:
Mahmoud-Emad 2025-07-02 15:30:23 +03:00
parent 352e846410
commit 8cb9696421

View File

@ -122,22 +122,26 @@ pub fn create_service_manager() -> Result<Box<dyn ServiceManager>, ServiceManage
} }
#[cfg(target_os = "linux")] #[cfg(target_os = "linux")]
{ {
// Try zinit first (preferred), fall back to systemd if it fails // Try zinit first (preferred), with multiple socket paths, fall back to systemd if all fail
let socket_path = "/tmp/zinit.sock"; let socket_paths = ["/run/zinit.sock", "/tmp/zinit.sock", "/var/run/zinit.sock"];
match ZinitServiceManager::new(socket_path) {
Ok(zinit_manager) => { for socket_path in &socket_paths {
log::debug!("Using zinit service manager"); log::debug!("Trying zinit socket: {}", socket_path);
Ok(Box::new(zinit_manager)) match ZinitServiceManager::new(socket_path) {
} Ok(zinit_manager) => {
Err(zinit_error) => { log::debug!("Using zinit service manager with socket: {}", socket_path);
log::warn!( return Ok(Box::new(zinit_manager));
"Zinit service manager failed, falling back to systemd: {}", }
zinit_error Err(zinit_error) => {
); log::debug!("Zinit socket {} failed: {}", socket_path, zinit_error);
// Fallback to systemd continue;
Ok(Box::new(SystemdServiceManager::new())) }
} }
} }
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")))] #[cfg(not(any(target_os = "macos", target_os = "linux")))]
{ {