Signal running only once spawn has started
This commit is contained in:
parent
9f316ac659
commit
a92647b740
|
@ -62,17 +62,17 @@ fn run(
|
||||||
_root_ds: Arc<Cap>,
|
_root_ds: Arc<Cap>,
|
||||||
service: DaemonService,
|
service: DaemonService,
|
||||||
) -> ActorResult {
|
) -> ActorResult {
|
||||||
{
|
let spec = language().unparse(&service);
|
||||||
let spec = language().unparse(&service);
|
|
||||||
config_ds.assert(t, &(), &syndicate_macros::template!("<service-running =spec>"));
|
|
||||||
}
|
|
||||||
|
|
||||||
Ok(during!(t, config_ds, language(), <daemon #(service.id.0) $config>, |t: &mut Activation| {
|
Ok(during!(t, config_ds, language(), <daemon #(service.id.0) $config>, {
|
||||||
match language().parse::<DaemonSpec>(&config) {
|
let spec = spec.clone();
|
||||||
|
let config_ds = Arc::clone(&config_ds);
|
||||||
|
|t: &mut Activation| match language().parse::<DaemonSpec>(&config) {
|
||||||
Ok(config) => {
|
Ok(config) => {
|
||||||
|
tracing::info!(?config);
|
||||||
let config = config.elaborate();
|
let config = config.elaborate();
|
||||||
|
let facet = t.facet.clone();
|
||||||
t.linked_task(syndicate::name!("subprocess"), async move {
|
t.linked_task(syndicate::name!("subprocess"), async move {
|
||||||
tracing::info!(?config);
|
|
||||||
let argv = config.argv.elaborate();
|
let argv = config.argv.elaborate();
|
||||||
let mut cmd = process::Command::new(argv.program);
|
let mut cmd = process::Command::new(argv.program);
|
||||||
cmd.args(argv.args);
|
cmd.args(argv.args);
|
||||||
|
@ -131,16 +131,24 @@ fn run(
|
||||||
|
|
||||||
tracing::info!(?cmd);
|
tracing::info!(?cmd);
|
||||||
let mut child = cmd.spawn()?;
|
let mut child = cmd.spawn()?;
|
||||||
|
|
||||||
|
facet.activate(
|
||||||
|
Account::new(syndicate::name!("announce-service-running")),
|
||||||
|
|t| {
|
||||||
|
config_ds.assert(t, &(), &syndicate_macros::template!("<service-running =spec>"));
|
||||||
|
Ok(())
|
||||||
|
})?;
|
||||||
|
|
||||||
tracing::info!(status = ?child.wait().await);
|
tracing::info!(status = ?child.wait().await);
|
||||||
|
|
||||||
Ok(())
|
Ok(())
|
||||||
});
|
});
|
||||||
|
Ok(())
|
||||||
}
|
}
|
||||||
Err(_) => {
|
Err(_) => {
|
||||||
tracing::error!(?config, "Invalid DaemonSpec");
|
tracing::error!(?config, "Invalid DaemonSpec");
|
||||||
return cannot_start();
|
return cannot_start();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Ok(())
|
|
||||||
}))
|
}))
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue