日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【一起学Rust | 进阶篇 | Service Manager库】Rust专用跨平台服务管理库

發布時間:2023/12/18 编程问答 49 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【一起学Rust | 进阶篇 | Service Manager库】Rust专用跨平台服务管理库 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

  • 前言
  • 一、安裝
  • 二、使用例程
    • 通用服務管理
    • 用戶級服務管理
    • 特定服務管理
  • 總結


前言

Service Manager是一個rust的專用跨平臺服務管理庫。它為rust程序提供了服務管理功能,現在它支持下列服務管理平臺的操作接口

  • sc.exe Windows
  • Launchd Mac OS
  • systemd Linux
  • OpenRC Linux
  • rc.d FreeBSD

  • 一、安裝

    在Cargo.toml中添加依賴

    service-manager = "0.1"

    二、使用例程

    通用服務管理

    這個 crate 提供了一種機制來檢測和使用當前操作系統的默認服務管理平臺。每個Service Manager 實例提供四種關鍵方法:

    • install - 安裝服務
    • uninstall - 卸載服務
    • start - 啟動服務
    • stop - 停止服務
    use service_manager::*; use std::{ffi::OsString, path::PathBuf}; fn main(){ // 為服務創建一個標簽 let label: ServiceLabel = "com.example.my-service".parse().unwrap();// 通過檢測平臺上的可用內容獲取通用服務 let manager = <dyn ServiceManager>::native() .expect("Failed to detect management platform");// 使用底層服務管理平臺安裝我們的服務 manager.install(ServiceInstallCtx { label: label.clone(), program: PathBuf::from("path/to/my-service-executable"),args: vec![OsString::from("--some-arg")], }).expect("Failed to install");// 使用底層服務管理平臺啟動我們的服務 manager.start(ServiceStartCtx { label: label.clone() }).expect("Failed to start");// 使用底層服務管理平臺停止我們的服務 manager.stop(ServiceStopCtx { label: label.clone() }).expect("Failed to stop");// 使用底層服務管理平臺卸載我們的服務 manager.uninstall(ServiceUninstallCtx { label: label.clone() }).expect("Failed to stop");}

    用戶級服務管理

    默認情況下,服務管理平臺會與系統級服務交互;但是,一些服務管理平臺喜歡systemd并 launchd支持用戶級服務。要在用戶級別與服務交互,您可以使用通用 ServiceManager::set_level功能配置您的管理器。

    use service_manager::*;// 創建服務標簽 let label: ServiceLabel = "com.example.my-service".parse().unwrap();// 獲取服務 let mut manager = <dyn ServiceManager>::native().expect("Failed to detect management platform");// 設定用戶級服務 manager.set_level(ServiceLevel::User).expect("Service manager does not support user-level services");// 其他操作 // ...

    特定服務管理

    有時您需要對綁定到特定平臺的服務的配置進行更多控制。為此,您可以顯式創建服務管理器并適當地設置配置屬性。

    use service_manager::*;// 創建服務標簽 let label: ServiceLabel = "com.example.my-service".parse().unwrap();// 實例化特定的服務管理器 let mut manager = LaunchdServiceManager::system();// 更新安裝服務時的安裝配置屬性 // 將不會添加 KeepAlive 標志 manager.config.install.keep_alive = false;// 使用指定的服務器管理器安裝服務 manager.install(ServiceInstallCtx {label: label.clone(),program: PathBuf::from("path/to/my-service-executable"),args: vec![OsString::from("--some-arg")], }).expect("Failed to install");

    總結

    以上就是本文的所有內容。本期學習了在Windows平臺和Linux平臺中,通過 Service Manager庫來管理系統的服務,他將成為你后續開發中非常好用的一個工具。

    總結

    以上是生活随笔為你收集整理的【一起学Rust | 进阶篇 | Service Manager库】Rust专用跨平台服务管理库的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。