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")]
{
// 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")))]
{