Quellcode durchsuchen

系统层判断遇到panic直接退出

skyfffire vor 2 Jahren
Ursprung
Commit
13c4b4b387
1 geänderte Dateien mit 13 neuen und 10 gelöschten Zeilen
  1. 13 10
      src/main.rs

+ 13 - 10
src/main.rs

@@ -43,14 +43,6 @@ async fn main() {
     // 日志级别配置
     let _guard = log_level_init(params.log_level.clone(), params.port.clone(), params.account_name.clone());
     info!("配置读取成功:{:?}。", params);
-    // panic错误捕获
-    let account_name_clone = params.account_name.clone();
-    std::panic::set_hook(Box::new(move |panic_info| {
-        let msg = format!("account={}, type=panic, msg={:?}, location={:?}",
-                          account_name_clone, panic_info.to_string(), panic_info.location());
-        warn!("{}", msg);
-        send_remote_err_log(msg);
-    }));
     // 主进程控制
     let running = Arc::new(AtomicBool::new(true));
     // ws退出程序
@@ -59,8 +51,19 @@ async fn main() {
     let quant_arc = quant_libs::init(params.clone(), ws_running.clone(), running.clone()).await;
     // 初始化中控服务
     server::run_server(params.port.clone(), running.clone(), quant_arc.clone());
-    // 退出检查程序
-    let running = control_c::exit_handler(running);
+    // ctrl c退出检查程序
+    control_c::exit_handler(running.clone());
+
+    // panic错误捕获,panic级别的错误直接退出
+    let account_name_clone = params.account_name.clone();
+    let panic_running = running.clone();
+    std::panic::set_hook(Box::new(move |panic_info| {
+        let msg = format!("account={}, type=panic, msg={:?}, location={:?}",
+                          account_name_clone, panic_info.to_string(), panic_info.location());
+        warn!("{}", msg);
+        send_remote_err_log(msg);
+        panic_running.store(false, Ordering::Relaxed);
+    }));
 
     // 每一秒检查一次程序是否结束
     while running.load(Ordering::Relaxed) {