Small rust crate to interact with systemd units
SYSTEMCTL_PATH
custom env. variable describes the absolute
location path of systemctl
binary, by default this crate uses /usr/bin/systemctl
,
but that can be customized:
SYSTEMCTL_PATH=/home/$me/bin/systemctl cargo build
Nominal service operations:
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);
// list all services
// by adding a --type filter
systemctl::list_units(Some("service"), None);
// list all services currently `enabled`
// by adding a --state filter
systemctl::list_units(Some("service"), Some("enabled"));
Use the unit structure for more information
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());
- parse all known attributes in
from_systemctl
- currently we study (try to parse) stdio result from systemctl() invokation,
without testing the exit status, which is bad. This is due to the fact
that we get apparently get an error code, on existing units that currently have a
dead
state