1 unstable release
0.1.0 | Nov 2, 2021 |
---|
#37 in #stop
120KB
2K
SLoC
cross-platform-service
The "cross-platform-service" crate lets you developing cross-platform services and service managers for Windows, Linux, and macOS. It supports install, delete, start and stop.
On Windows, API is called by using the microsoft/windows-rs crate, And it is also possible to call the Windows API directory if the service has special needs for Windows.
On Linux, D-Bus used for communication with systemd. The default behavior is defining a systemd service unit, in "/etc/systemd/system" path.
Getting started
use std::fs::OpenOptions;
use std::io::Write;
use std::sync::Arc;
use std::sync::atomic::{AtomicBool, Ordering};
use std::time::Duration;
use service_manager_rs::service::start_service;
const SERVICE_NAME: &str = "MyCrPlSVC";
fn main() {
start_service(SERVICE_NAME, service_main);
}
fn service_main(running: Arc<AtomicBool>) {
// The following code will run service for a minute and check if service stopped every
// 100 milli-seconds
// Return from this function will stop service
for _ in 0..600 {
if !running.load(Ordering::Relaxed) {
// Write stopping service codes here
// In linux SIGTERM signal set running to false and in Windows service stop command
// will do the same
return;
}
std::thread::sleep(Duration::from_millis(100));
}
}
To compile the project on Linux, D-Bus developing libraries are required, which is may be installed with the following command:
apt install libdbus-1-dev
Examples
cross-platform
Install a cross-platform Service
Delete a cross-platform service
Start a cross-platform service
Windows Services
Dependencies
~5–36MB
~641K SLoC