feat: add file lock
This commit is contained in:
30
src/main.rs
30
src/main.rs
@@ -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> {
|
||||
|
||||
Reference in New Issue
Block a user