diff --git a/Cargo.toml b/Cargo.toml index 99dac73..bda3dba 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -27,6 +27,6 @@ rand = "0.8.5" regex = "1.10.2" simplelog = "0.12.1" thiserror = "1.0.50" -time = { version = "0.3.30", features = ["local-offset", "macros"]} +time = { version = "0.3.30", features = ["local-offset"]} tokio = { version = "1.34.0", features = ["full"] } tokio-util = "0.7.10" diff --git a/docker/alpine/etc/wingmate/crontab b/docker/alpine/etc/wingmate/crontab index 2a4814a..f2debd4 100644 --- a/docker/alpine/etc/wingmate/crontab +++ b/docker/alpine/etc/wingmate/crontab @@ -1,4 +1,3 @@ 17 * * * * /etc/wingmate/crontab.d/cron1.sh */5 * * * * /etc/wingmate/crontab.d/cron2.sh -21,41 3,6,14,17,20,22 * * * /etc/wingmate/crontab.d/cron3.sh -* * * * * /etc/wingmate/crontab.d/cron4.sh \ No newline at end of file +21,41 3,6,14,17,20,22 * * * /etc/wingmate/crontab.d/cron3.sh \ No newline at end of file diff --git a/docker/alpine/etc/wingmate/crontab.d/cron4.sh b/docker/alpine/etc/wingmate/crontab.d/cron4.sh deleted file mode 100644 index 3a51c28..0000000 --- a/docker/alpine/etc/wingmate/crontab.d/cron4.sh +++ /dev/null @@ -1,3 +0,0 @@ -#!/bin/sh - -exec wmtest-helper-log /var/log/cron4.log "this cron runs every minute" \ No newline at end of file diff --git a/src/bin/test-helper/spawner.rs b/src/bin/test-helper/spawner.rs index c398865..d2bcde4 100644 --- a/src/bin/test-helper/spawner.rs +++ b/src/bin/test-helper/spawner.rs @@ -19,21 +19,22 @@ fn main() -> Result<(), Box> { if args.len() > 1 { let x: u64 = args[1].parse()?; - for _i in 0..x { - let sleep_time = rng.gen_range(10..20); - info!("starting wmtest-helper-dummy {}", &sleep_time); - let child = Command::new("/usr/local/bin/wmtest-helper-dummy").arg(format!("{}", sleep_time)).spawn(); - if let Err(e) = child { - error!("error spawning child: {e}"); + loop { + for _i in 0..x { + let sleep_time = rng.gen_range(10..20); + info!("starting wmtest-helper-dummy {}", &sleep_time); + let child = Command::new("/usr/local/bin/wmtest-helper-dummy").arg(format!("{}", sleep_time)).spawn(); + if let Err(e) = child { + error!("error spawning child: {e}"); + } } - } - let pause_time = rng.gen_range(5..10); - info!("going to sleep for {}", &pause_time); - std::thread::sleep(std::time::Duration::from_secs(pause_time)); + let pause_time = rng.gen_range(10..20); + info!("going to sleep for {}", &pause_time); + std::thread::sleep(std::time::Duration::from_secs(pause_time)); + info!("waking up") + } } else { return Err(anyhow::anyhow!("invalid arguments").into()); } - - Ok(()) } diff --git a/src/init.rs b/src/init.rs index 7de5970..8dcfdf6 100644 --- a/src/init.rs +++ b/src/init.rs @@ -27,6 +27,6 @@ pub async fn start() -> Result<(), error::WingmateInitError> { } let config = config::Config::find(vec_search)?; - // dbg!(&config); + dbg!(&config); daemon::start(config).await } \ No newline at end of file diff --git a/src/init/daemon/starter.rs b/src/init/daemon/starter.rs index e9b0085..59038c3 100644 --- a/src/init/daemon/starter.rs +++ b/src/init/daemon/starter.rs @@ -1,24 +1,21 @@ -use time::error::IndeterminateOffset; use tokio::task::JoinSet; use tokio::process::{Command, Child}; use tokio_util::sync::CancellationToken; use tokio::select; use tokio::io::Result as tokio_result; use tokio::time::{sleep, interval}; -use std::env; use std::time::Duration; use std::process::ExitStatus; use nix::sys::signal::{kill, Signal}; use nix::errno::Errno; use nix::unistd::Pid; use anyhow::{Context, anyhow}; -use time::{OffsetDateTime, Duration as TimeDur, Weekday, UtcOffset}; +use time::{OffsetDateTime, Duration as TimeDur, Weekday}; use crate::init::config; use crate::init::error::{WingmateInitError, CronConfigError}; const CRON_TRIGGER_WAIT_SECS: u64 = 20; -const ENV_UTC_OFFSET: &'static str = "WINGMATE_TIME_OFFSET"; pub fn start_services(ts: &mut JoinSet>, cfg: &config::Config, cancel: CancellationToken) -> Result<(), WingmateInitError> { @@ -114,11 +111,9 @@ fn result_match(result: tokio_result) -> Result<(), anyhow::Error> { pub fn start_cron(ts: &mut JoinSet>, cfg: &config::Config, cancel: CancellationToken) -> Result<(), WingmateInitError> { - dbg!("cron: starting"); for c_ in cfg.get_cron_iter() { let cron = c_.clone(); let in_loop_cancel = cancel.clone(); - dbg!("cron: item", c_); ts.spawn(async move { if cron.day_of_month != config::CronTimeFieldSpec::Any @@ -126,35 +121,18 @@ pub fn start_cron(ts: &mut JoinSet>, cfg: &config: return Err(WingmateInitError::CronConfig { source: CronConfigError::ClashingConfig }); } - dbg!("cron: async task spawned"); - - let cron = cron.clone(); + // let cron = cron.clone(); let mut cron_interval = interval(Duration::from_secs(CRON_TRIGGER_WAIT_SECS)); let mut cron_procs: JoinSet> = JoinSet::new(); let mut last_running: Option = None; 'continuous: loop { let cron = cron.clone(); let cron_proc_cancel = in_loop_cancel.clone(); - dbg!("cron: single: in loop", &cron.command); let mut flag = true; - let tr: Result; - if let Ok(offset) = env::var(ENV_UTC_OFFSET) { - if let Ok(i_off) = offset.parse::() { - let utc_time = OffsetDateTime::now_utc().to_offset(UtcOffset::from_hms(i_off, 0, 0).unwrap()); - tr = Ok(utc_time); - } else { - tr = OffsetDateTime::now_local(); - } - } else { - tr = OffsetDateTime::now_local(); - } - // let tr = OffsetDateTime::now_local(); - if let Ok(local_time) = tr { - dbg!("cron: current local time", &local_time); + if let Ok(local_time) = OffsetDateTime::now_local() { if let Some(last) = last_running { - dbg!("cron: last runing instance", &last); if local_time - last < TimeDur::minutes(1) { flag = false; } else { @@ -163,25 +141,14 @@ pub fn start_cron(ts: &mut JoinSet>, cfg: &config: cron.day_of_month.is_match(local_time.day()) && cron.day_of_week.is_match(weekday_map(local_time.weekday())); } - } else { - flag = flag && cron.minute.is_match(local_time.minute()) && - cron.hour.is_match(local_time.hour()) && - cron.day_of_month.is_match(local_time.day()) && - cron.day_of_week.is_match(weekday_map(local_time.weekday())); } if flag { - dbg!("cron: timing: hit: {}", &cron.command); last_running = Some(local_time); cron_procs.spawn(async move { run_cron_command(cron.command.clone(), cron_proc_cancel).await }); } - } else { - dbg!("cron: unexpected error"); - if let Err(e) = tr { - dbg!(e); - } } if cron_procs.is_empty() { @@ -242,7 +209,6 @@ async fn run_cron_command(command: String, cancel: CancellationToken) -> Result< } } - dbg!("cron: in running command"); if args.is_empty() { return Err(WingmateInitError::Other { source: anyhow!("parsed as empty: {}", command) }); }