xref: /DragonReach/src/main.rs (revision e945c217b313a00a228c454741360ee9a74397d2)
1 mod contants;
2 mod error;
3 mod executor;
4 mod manager;
5 mod parse;
6 mod systemctl;
7 mod task;
8 mod time;
9 mod unit;
10 
11 use error::ErrorFormat;
12 use manager::{timer_manager::TimerManager, Manager};
13 use parse::UnitParser;
14 use systemctl::listener::Systemctl;
15 
16 use crate::executor::Executor;
17 
18 pub struct FileDescriptor(usize);
19 
20 const DRAGON_REACH_UNIT_DIR: &'static str = "/etc/reach/system/";
21 fn main() {
22     // 初始化
23     Systemctl::init();
24 
25     let mut units_file_name = Vec::new();
26     //读取目录里面的unit文件
27     if let Ok(entries) = std::fs::read_dir(DRAGON_REACH_UNIT_DIR) {
28         for entry in entries {
29             if let Ok(entry) = entry {
30                 if let Ok(file_type) = entry.file_type() {
31                     if file_type.is_file() {
32                         let filename = entry.file_name().to_str().unwrap().to_string();
33                         units_file_name.push(filename);
34                     }
35                 }
36             }
37         }
38     }
39 
40     //启动服务
41     for path in units_file_name {
42         let id = match UnitParser::from_path(&path) {
43             Ok(id) => id,
44             Err(e) => {
45                 eprintln!("Err:{}", e.error_format());
46                 0
47             }
48         };
49         if id != 0 {
50             if let Err(e) = Executor::exec(id) {
51                 eprintln!("Err:{}", e.error_format());
52             }
53         }
54         println!("Parse {} success!", path);
55     }
56 
57     // 启动完服务后进入主循环
58     loop {
59         // 检查各服务运行状态
60         Manager::check_running_status();
61         // 检查cmd进程状态
62         Manager::check_cmd_proc();
63         // 检查计时器任务
64         TimerManager::check_timer();
65         // 监听systemctl
66         Systemctl::ctl_listen();
67     }
68 }
69