14 个不稳定版本 (3 个破坏性更新)
0.3.1 | 2023年10月5日 |
---|---|
0.3.0 | 2023年7月23日 |
0.2.0 | 2023年7月19日 |
0.1.9 | 2022年12月30日 |
0.1.7 | 2022年7月1日 |
#237 in Unix APIs
每月下载量:3,384
用于 4 个 crate (3 个直接使用)
32KB
572 行
systemctl
一个小型的 rust crate,用于与 systemd 单元交互
功能
- serde:使本 crate 中的结构体可序列化和反序列化
限制
目前不支持 SystemD 版本 <245,因为单元文件列表已从两列布局更改为三列布局。参见:SystemD 更新日志
环境
SYSTEMCTL_PATH
自定义环境变量描述了 systemctl
二进制文件的绝对位置路径,默认情况下,此 crate 使用 /usr/bin/systemctl
,但可以进行自定义
SYSTEMCTL_PATH=/home/$me/bin/systemctl cargo build
单元/服务操作
标准服务操作
systemctl::stop("systemd-journald.service")
.unwrap();
systemctl::restart("systemd-journald.service")
.unwrap();
if let Ok(true) = systemctl::exists("ntpd") {
let is_active = systemctl::is_active("ntpd")
.unwrap();
}
服务枚举
use systemctl;
// list all units
systemctl::list_units(None, None, None);
// list all services
// by adding a --type filter
systemctl::list_units(Some("service"), None, None);
// list all services currently `enabled`
// by adding a --state filter
systemctl::list_units(Some("service"), Some("enabled"), None);
// list all services starting with cron
systemctl::list_units(Some("service"), None, Some("cron*"));
单元结构
使用单元结构以获取更多信息
let unit = systemctl::Unit::from_systemctl("sshd")
.unwrap();
unit.restart().unwrap();
println!("active: {}", unit.active);
println!("preset: {}", unit.preset);
if let Some(docs) = unit.docs { // doc pages available
for doc in docs {
if let Some(page) = doc.as_man() {
// `man` page exists
}
if let Some(url) = doc.as_url() {
// `url` is indicated
}
}
}
println!("auto_start (enabled): {}", unit.auto_start);
println!("config script : {}", unit.script);
println!("pid: {}", unit.pid);
println!("Running task(s): {}", unit.tasks.unwrap());
println!("Memory consumption: {}", unit.memory.unwrap());
待办事项
- 在
from_systemctl
中解析所有已知属性
依赖关系
~0.8–1.3MB
~28K SLoC