feat: add file lock

This commit is contained in:
2020-10-15 08:13:23 +08:00
parent 6c854065d9
commit b055633cfd
5 changed files with 147 additions and 10 deletions

View File

@@ -5,6 +5,7 @@ use std::{ collections::HashMap, fs, panic, thread, time::Duration, process::Com
use log::LevelFilter;
use chrono::prelude::*;
use serde::{ Deserialize, Serialize };
use file_lock::FileLock;
use rust_util::{ util_str::read_str_to_lines, util_file::locate_file };
use dingtalk::DingTalk;
@@ -13,6 +14,7 @@ struct KeepRunningConfig {
check_inverval_secs: Option<u64>,
show_debug_output: Option<bool>,
notify_token: String,
lock_file: Option<String>,
items: Vec<KeepRunningConfigItem>,
}
@@ -28,12 +30,6 @@ lazy_static!{
}
fn main() {
if let Err(_) = simple_logging::log_to_file("/var/log/keeprunningd.log", LevelFilter::Info) {
if let Err(_) = simple_logging::log_to_file("/tmp/keeprunningd.log", LevelFilter::Info) {
simple_logging::log_to_stderr(LevelFilter::Info);
}
}
panic::set_hook(Box::new(|panic_info| {
error!("Panic in running keeprunningd: {:?}", panic_info);
}));
@@ -41,12 +37,34 @@ fn main() {
Some(c) => c, None => return,
};
let mut the_file_lock = None;
if let Some(ref lock_file) = keep_running_config.lock_file {
the_file_lock = match FileLock::lock(lock_file, false, true) {
Ok(lock) => {
info!("Lock file success: {}", lock_file);
Some(lock)
},
Err(_) => {
warn!("Lock file failed: {}", lock_file);
return;
},
};
}
if let Err(_) = simple_logging::log_to_file("/var/log/keeprunningd.log", LevelFilter::Info) {
if let Err(_) = simple_logging::log_to_file("/tmp/keeprunningd.log", LevelFilter::Info) {
simple_logging::log_to_stderr(LevelFilter::Info);
}
}
let keep_running_config = Arc::new(keep_running_config);
for check_cnt in 0.. {
info!("Check index: {} @{:?}", check_cnt, Local::now());
keep_runningd(keep_running_config.clone());
thread::sleep(Duration::from_secs(keep_running_config.check_inverval_secs.unwrap_or(60 * 60)));
}
drop(the_file_lock);
}
fn parse_keep_running_config() -> Option<KeepRunningConfig> {