diff --git a/src-tauri/src/core/mod.rs b/src-tauri/src/core/mod.rs
index 6e467cffb15e348782c3bf3e950467398dd8476b..c1e92a76ada23226d0dc04f269b51ca0e9d8ea7c 100644
--- a/src-tauri/src/core/mod.rs
+++ b/src-tauri/src/core/mod.rs
@@ -91,7 +91,7 @@ impl Core {
     // timer initialize
     let mut timer = self.timer.lock();
     timer.set_core(self.clone());
-    log_if_err!(timer.refresh());
+    log_if_err!(timer.restore());
   }
 
   /// save the window instance
diff --git a/src-tauri/src/core/profiles.rs b/src-tauri/src/core/profiles.rs
index 16b75ecd41d1e394ebce64bfc4b53d749aac4026..6b4d6e18483af16cff875753be21305f8ae1fb56 100644
--- a/src-tauri/src/core/profiles.rs
+++ b/src-tauri/src/core/profiles.rs
@@ -121,7 +121,7 @@ impl Profiles {
       }
     }
 
-    bail!("failed to get the item by \"{}\"", uid);
+    bail!("failed to get the profile item \"uid:{uid}\"");
   }
 
   /// append new item
@@ -178,7 +178,7 @@ impl Profiles {
     }
 
     self.items = Some(items);
-    bail!("failed to found the uid \"{uid}\"")
+    bail!("failed to find the profile item \"uid:{uid}\"")
   }
 
   /// be used to update the remote item
@@ -286,7 +286,7 @@ impl Profiles {
         return Ok(config::read_yaml::<Mapping>(file_path.clone()));
       }
     }
-    bail!("failed to found the uid \"{current}\"");
+    bail!("failed to find current profile \"uid:{current}\"");
   }
 
   /// generate the data for activate clash config
diff --git a/src-tauri/src/core/timer.rs b/src-tauri/src/core/timer.rs
index 3e5ccb95c16e8016b7c2dec1c8c2a5f4ff01a38d..181c0d5bee06a720f0b8d6c55ef565c485e0c244 100644
--- a/src-tauri/src/core/timer.rs
+++ b/src-tauri/src/core/timer.rs
@@ -1,5 +1,6 @@
 use super::Core;
 use crate::log_if_err;
+use crate::utils::help::get_now;
 use anyhow::{bail, Context, Result};
 use delay_timer::prelude::{DelayTimer, DelayTimerBuilder, TaskBuilder};
 use std::collections::HashMap;
@@ -63,6 +64,34 @@ impl Timer {
     Ok(())
   }
 
+  /// restore timer
+  pub fn restore(&mut self) -> Result<()> {
+    self.refresh()?;
+
+    let cur_timestamp = get_now(); // seconds
+    let profiles = self.core.as_ref().unwrap().profiles.lock();
+
+    profiles
+      .get_items()
+      .unwrap_or(&vec![])
+      .iter()
+      .filter(|item| item.uid.is_some() && item.updated.is_some() && item.option.is_some())
+      .filter(|item| {
+        // mins to seconds
+        let interval = item.option.as_ref().unwrap().update_interval.unwrap_or(0) as usize * 60;
+        let updated = item.updated.unwrap();
+        return interval > 0 && cur_timestamp - updated >= interval;
+      })
+      .for_each(|item| {
+        let uid = item.uid.as_ref().unwrap();
+        if let Some((task_id, _)) = self.timer_map.get(uid) {
+          log_if_err!(self.delay_timer.advance_task(*task_id));
+        }
+      });
+
+    Ok(())
+  }
+
   /// generate a uid -> update_interval map
   fn gen_map(&self) -> HashMap<String, u64> {
     let profiles = self.core.as_ref().unwrap().profiles.lock();