...
This commit is contained in:
52
packages/system/process/src/screen.rs
Normal file
52
packages/system/process/src/screen.rs
Normal file
@@ -0,0 +1,52 @@
|
||||
use crate::run_command;
|
||||
use anyhow::Result;
|
||||
use std::fs;
|
||||
|
||||
/// Executes a command in a new screen session.
|
||||
///
|
||||
/// # Arguments
|
||||
///
|
||||
/// * `name` - The name of the screen session.
|
||||
/// * `cmd` - The command to execute.
|
||||
///
|
||||
/// # Returns
|
||||
///
|
||||
/// * `Result<()>` - Ok if the command was executed successfully, otherwise an error.
|
||||
pub fn new(name: &str, cmd: &str) -> Result<()> {
|
||||
let script_path = format!("/tmp/cmd_{}.sh", name);
|
||||
let mut script_content = String::new();
|
||||
|
||||
if !cmd.starts_with("#!") {
|
||||
script_content.push_str("#!/bin/bash\n");
|
||||
}
|
||||
|
||||
script_content.push_str("set -e\n");
|
||||
script_content.push_str(cmd);
|
||||
|
||||
fs::write(&script_path, script_content)?;
|
||||
fs::set_permissions(
|
||||
&script_path,
|
||||
std::os::unix::fs::PermissionsExt::from_mode(0o755),
|
||||
)?;
|
||||
|
||||
let screen_cmd = format!("screen -d -m -S {} {}", name, script_path);
|
||||
run_command(&screen_cmd)?;
|
||||
|
||||
Ok(())
|
||||
}
|
||||
|
||||
/// Kills a screen session.
|
||||
///
|
||||
/// # Arguments
|
||||
///
|
||||
/// * `name` - The name of the screen session to kill.
|
||||
///
|
||||
/// # Returns
|
||||
///
|
||||
/// * `Result<()>` - Ok if the session was killed successfully, otherwise an error.
|
||||
pub fn kill(name: &str) -> Result<()> {
|
||||
let cmd = format!("screen -S {} -X quit", name);
|
||||
run_command(&cmd)?;
|
||||
std::thread::sleep(std::time::Duration::from_millis(500));
|
||||
Ok(())
|
||||
}
|
Reference in New Issue
Block a user