KeiSeiKit-1.0/_primitives/_rust/kei-svc-systemd/src/main.rs
Parfii-bot 0be354a920 KeiSeiKit-public — clean state
Single-commit clean baseline after security scrub of niche-tells,
project codenames, internal jargon, and contributor-email leaks.

Contents:
- 100 Rust crates (_primitives/_rust/)
- 37 agent manifests (_manifests/) + generated specs (_generated/)
- 67 user-invocable skills (skills/)
- 33 hooks (hooks/)
- Composition blocks (_blocks/)
- Documentation (docs/, README.md)
- TS adapter packages (_ts_packages/)
- Assembler (_assembler/)
- Roles (_roles/)
- Templates (_templates/)
- Forgejo CI (.forgejo/)

Author: Denis Parfionovich <info@greendragon.info>

License: see LICENSE.
2026-05-01 12:09:03 +08:00

50 lines
1.6 KiB
Rust

// SPDX-License-Identifier: Apache-2.0
// Copyright 2026 <author org>
use clap::{Parser, Subcommand};
use kei_runtime_core::traits::service::{RestartPolicy, ServiceManager, ServiceUnit, TimerSpec};
use kei_runtime_core::HasDna;
use kei_svc_systemd::SystemdManager;
#[derive(Parser)]
#[command(name = "kei-svc-systemd", version)]
struct Cli { #[command(subcommand)] cmd: Cmd }
#[derive(Subcommand)]
enum Cmd {
Dna,
/// Render a service+timer pair to /tmp (no systemctl invocation).
Render {
#[arg(long)] name: String,
#[arg(long)] exec: String,
#[arg(long, default_value = "*-*-* 03:07:00")] cron: String,
#[arg(long, default_value = "/tmp")] out: String,
},
}
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
let cli = Cli::parse();
match cli.cmd {
Cmd::Dna => {
let m = SystemdManager::with("/tmp", "systemctl", false, None)?;
println!("{}", m.dna());
}
Cmd::Render { name, exec, cron, out } => {
let m = SystemdManager::with(&out, "systemctl", false, None)?;
let unit = ServiceUnit {
name: name.clone(),
exec_path: exec,
args: vec!["run".into()],
env: vec![],
working_dir: "/".into(),
user: None,
restart_policy: RestartPolicy::OnFailure,
timer_spec: Some(TimerSpec { on_calendar: cron, randomized_delay_sec: 60 }),
};
m.install(&unit).await?;
println!("{out}/{name}.service + {out}/{name}.timer written");
}
}
Ok(())
}