Crates.io | rust-single |
lib.rs | rust-single |
version | 25.8.41 |
created_at | 2025-08-15 02:53:31.783303+00 |
updated_at | 2025-08-15 03:42:58.581069+00 |
description | rust application single process |
homepage | https://github.com/lingting-projects/rust-single |
repository | https://github.com/lingting-projects/rust-single |
max_upload_size | |
id | 1796139 |
size | 19,085 |
用来确保应用程序单进程运行.
fn create_single(path: PathBuf, info: &str) -> AnyResult<Option<Single>> {
let single = Single::create(path, info)?;
if !single.is_single {
log::error!("存在已启动进程: {}", single.pid.unwrap_or(0));
log::error!("已启动进程info: {}", single.info);
// 唤醒已存在进程
// single.wake("")?;
Err(Box::new(BizError::SingleRunning))
} else {
Ok(Some(single))
}
}
fn main() ->AnyResult<()> {
let lock_path = "/tmp/single.lock";
let mut o_single = create_single(lock_path, "single info")?;
// on close
let o = o_single.take();
if let Some(single) = o {
// 如果要同时兼容 root和非root权限启动, 需要在释放后删除文件. 避免由于权限导致异常
let path = single.path.clone();
let path_info = single.path_info.clone();
drop(single);
let _ = file::delete(&path);
let _ = file::delete(&path_info);
}
}