diff --git a/backend/src/bin/embassy-init.rs b/backend/src/bin/embassy-init.rs index bee2285c5..1eeaad813 100644 --- a/backend/src/bin/embassy-init.rs +++ b/backend/src/bin/embassy-init.rs @@ -8,6 +8,7 @@ use embassy::disk::fsck::RepairStrategy; use embassy::disk::main::DEFAULT_PASSWORD; use embassy::disk::REPAIR_DISK_PATH; use embassy::hostname::get_product_key; +use embassy::init::STANDBY_MODE_PATH; use embassy::middleware::cors::cors; use embassy::middleware::diagnostic::diagnostic; use embassy::middleware::encrypt::encrypt; @@ -128,6 +129,12 @@ async fn run_script_if_exists>(path: P) { #[instrument] async fn inner_main(cfg_path: Option<&str>) -> Result, Error> { + if tokio::fs::metadata(STANDBY_MODE_PATH).await.is_ok() { + tokio::fs::remove_file(STANDBY_MODE_PATH).await?; + embassy::sound::SHUTDOWN.play().await?; + futures::future::pending::<()>().await; + } + embassy::sound::BEP.play().await?; run_script_if_exists("/embassy-os/preinit.sh").await; diff --git a/backend/src/init.rs b/backend/src/init.rs index 8d6e77f79..6acc7e43e 100644 --- a/backend/src/init.rs +++ b/backend/src/init.rs @@ -6,10 +6,12 @@ use tokio::process::Command; use crate::context::rpc::RpcContextConfig; use crate::db::model::ServerStatus; use crate::install::PKG_DOCKER_DIR; +use crate::sound::SHUTDOWN; use crate::util::Invoke; use crate::Error; pub const SYSTEM_REBUILD_PATH: &str = "/embassy-os/system-rebuild"; +pub const STANDBY_MODE_PATH: &str = "/embassy-os/standby"; pub async fn check_time_is_synchronized() -> Result { Ok(String::from_utf8( diff --git a/backend/src/shutdown.rs b/backend/src/shutdown.rs index 3d4ffb5ef..c792ee150 100644 --- a/backend/src/shutdown.rs +++ b/backend/src/shutdown.rs @@ -6,7 +6,7 @@ use rpc_toolkit::command; use crate::context::RpcContext; use crate::disk::main::export; -use crate::init::SYSTEM_REBUILD_PATH; +use crate::init::{STANDBY_MODE_PATH, SYSTEM_REBUILD_PATH}; use crate::sound::SHUTDOWN; use crate::util::{display_none, Invoke}; use crate::Error; @@ -54,23 +54,18 @@ impl Shutdown { tracing::debug!("{:?}", e); } } - if let Err(e) = SHUTDOWN.play().await { - tracing::error!("Error Playing Shutdown Song: {}", e); - tracing::debug!("{:?}", e); + if self.restart { + if let Err(e) = SHUTDOWN.play().await { + tracing::error!("Error Playing Shutdown Song: {}", e); + tracing::debug!("{:?}", e); + } } }); drop(rt); - if self.restart { - Command::new("reboot").spawn().unwrap().wait().unwrap(); - } else { - Command::new("shutdown") - .arg("-h") - .arg("now") - .spawn() - .unwrap() - .wait() - .unwrap(); + if !self.restart { + std::fs::write(STANDBY_MODE_PATH, "").unwrap(); } + Command::new("reboot").spawn().unwrap().wait().unwrap(); } }