diff --git a/src/main.rs b/src/main.rs index 3c2edfd..540267d 100644 --- a/src/main.rs +++ b/src/main.rs @@ -7,8 +7,6 @@ mod lock; mod test; use std::ffi::OsString; -use std::io::ErrorKind; -use std::os::unix::process::CommandExt; use std::path::Path; use std::process::Command; use std::time::Duration; @@ -64,8 +62,10 @@ async fn inner_main( acquire_lock(client.clone(), &lock, &ctx).await; info!("Initiating node reboot"); - exec_cmd(ctx.reboot_cmd()); - unreachable!(); + if let Err(e) = run_cmd(ctx.reboot_cmd()) { + error!("Failed to run reboot command: {e}"); + } + Ok(()) } async fn acquire_lock(client: kube::Client, lock: &lock::Lock, ctx: &Context) { @@ -85,17 +85,11 @@ async fn acquire_lock(client: kube::Client, lock: &lock::Lock, ctx: &Context) { } } -fn exec_cmd(cmd: &[OsString]) { +fn run_cmd(cmd: &[OsString]) -> std::io::Result<()> { let program = &cmd[0]; let args = &cmd[1..]; - let error = Command::new(program).args(args).exec(); - let rc = match error.kind() { - ErrorKind::NotFound => 127, - ErrorKind::PermissionDenied => 126, - _ => 1, - }; - eprintln!("{}: {error}", program.to_string_lossy()); - std::process::exit(rc); + Command::new(program).args(args).spawn()?.wait()?; + Ok(()) } async fn release_lock(client: kube::Client, lock: &lock::Lock) { diff --git a/tests/krc-it-test/main.rs b/tests/krc-it-test/main.rs index 6fdcbc6..9d1b5a0 100644 --- a/tests/krc-it-test/main.rs +++ b/tests/krc-it-test/main.rs @@ -108,7 +108,7 @@ fn run_it( env.insert("REBOOT_LOCK_GROUP".into(), g.into()); } Command::new(EXE) - .args(["echo", "test success"]) + .args(["sh", "-c", "echo 'test success' & kill $PPID"]) .env_clear() .envs(&env) .stdin(Stdio::null())