diff --git a/syndicate-server/src/services/daemon.rs b/syndicate-server/src/services/daemon.rs index 2f959bb..51d1728 100644 --- a/syndicate-server/src/services/daemon.rs +++ b/syndicate-server/src/services/daemon.rs @@ -62,17 +62,17 @@ fn run( _root_ds: Arc, service: DaemonService, ) -> ActorResult { - { - let spec = language().unparse(&service); - config_ds.assert(t, &(), &syndicate_macros::template!("")); - } + let spec = language().unparse(&service); - Ok(during!(t, config_ds, language(), , |t: &mut Activation| { - match language().parse::(&config) { + Ok(during!(t, config_ds, language(), , { + let spec = spec.clone(); + let config_ds = Arc::clone(&config_ds); + |t: &mut Activation| match language().parse::(&config) { Ok(config) => { + tracing::info!(?config); let config = config.elaborate(); + let facet = t.facet.clone(); t.linked_task(syndicate::name!("subprocess"), async move { - tracing::info!(?config); let argv = config.argv.elaborate(); let mut cmd = process::Command::new(argv.program); cmd.args(argv.args); @@ -131,16 +131,24 @@ fn run( tracing::info!(?cmd); let mut child = cmd.spawn()?; + + facet.activate( + Account::new(syndicate::name!("announce-service-running")), + |t| { + config_ds.assert(t, &(), &syndicate_macros::template!("")); + Ok(()) + })?; + tracing::info!(status = ?child.wait().await); Ok(()) }); + Ok(()) } Err(_) => { tracing::error!(?config, "Invalid DaemonSpec"); return cannot_start(); } } - Ok(()) })) }