Categorygithub.com/HJH0924/Systemctl
repositorypackage
0.0.0-20240913095859-3fe5e202839d
Repository: https://github.com/hjh0924/systemctl.git
Documentation: pkg.go.dev

# Packages

No description provided by the author

# README

PkgGoDev

Systemctl

这个库旨在为 Go 开发人员提供符合习惯的 systemctl 绑定,以便更容易地使用 Go 语言编写系统工具。这个工具试图通过为 systemctl 提供结构化、经过彻底测试的包装器,来消除随意使用 shell 执行 systemctl 命令的猜测工作。

如果你的系统不是运行(或目标是另一个运行)systemctl,这个库对你来说可能没什么用处。

什么是 systemctl

systemctl 是一个命令行程序,它允许用户控制 systemd 系统和服务管理器。

systemctl 可以用来检查和控制 "systemd" 系统和服务管理器的状态。有关这个工具管理的基本概念和功能的介绍,请参阅 官方 systemctl 文档

当前支持的 systemctl 功能

  • systemctl daemon-reload
  • systemctl disable
  • systemctl enable
  • systemctl reenable
  • systemctl is-active
  • systemctl is-enabled
  • systemctl is-failed
  • systemctl show
  • systemctl start
  • systemctl status
  • systemctl stop
  • systemctl restart
  • systemctl mask
  • systemctl unmask

...

当前支持的辅助功能

  • 检查服务是否激活 IsActive:确定指定的服务是否处于激活状态。
  • 检查服务是否启用 IsEnabled:检查服务是否设置为在系统启动时自动启动。
  • 检查服务是否失败 IsFailed:检查服务是否启动失败。
  • 获取服务启动时间 GetStartTime:获取服务的启动时间。
  • 获取服务重启次数 GetUnitRestartCount:获取服务重启的次数。
  • 获取服务内存使用量 GetMemoryUsage:获取服务当前的内存使用量。
  • 获取主进程 PID GetMainPID:获取服务主进程的进程 ID。
  • 列出所有单元 GetAllUnits:获取所有 systemd 单元的列表及其状态和描述。
  • 列出所有已屏蔽单元 GetAllMaskedUnits:获取所有被屏蔽(不允许启动)的 systemd 单元列表。
  • 检查单元是否已屏蔽 IsMasked:检查指定单元是否被屏蔽。
  • 检查服务是否正在运行 IsRunning:检查服务是否正在运行。

...

有用的错误

所有函数都返回一个预定义的错误类型,强烈建议正确处理这些错误。

上下文支持

这个库的所有调用都支持 Go 的 context 功能。

安装

你可以通过以下命令来安装 Systemctl Go 库:

go get github.com/HJH0924/Systemctl

如何使用

要使用 Systemctl Go 库,请按照以下步骤操作:

  1. 导入库到你的 Go 项目中。
import "github.com/HJH0924/Systemctl"
  1. 使用库中的功能函数来执行系统服务管理任务。

例如,要检查服务是否激活,你可以使用 IsActive 函数:

package main

import (
	"context"
	"fmt"

	"github.com/HJH0924/Systemctl"
)

func main() {
	ctx := context.Background()
	systemctl := Systemctl.NewSystemctl()
	res := systemctl.Start(ctx, "testservice", Systemctl.Options{Mode: Systemctl.USER})
	active, err := Systemctl.IsActive(systemctl, ctx, "testservice", Systemctl.Options{Mode: Systemctl.USER})
	if err != nil {
		fmt.Println("检查服务状态出错:", err)
		return
	}
	fmt.Printf("testservice 是否处于活动状态?%v\n", active)
}

运行测试

运行测试用例之前,您需要在您的系统上安装 testservice.service

# 以 root 用户身份运行测试
sudo make install-root
# 以普通用户身份运行测试
sudo make install-user

为了全面测试这个库,您需要以root用户和普通用户身份运行测试,因为systemctl可能需要root权限来执行某些操作。以下是一些建议:

  1. 以root用户身份运行测试:某些测试可能需要root权限,例如启用或禁用服务。

    sudo su root # 切换 root 用户
    go test -run TestDaemonReload # 以 root 身份运行 TestDaemonReload 测试用例
    
  2. 以普通用户身份运行测试:其他测试应该以普通用户身份运行,以确保库在没有提升权限的情况下也能正常工作。

    go test -run TestDaemonReload
    

贡献

欢迎任何形式的贡献!如果你有任何问题、建议或想要提交代码,请随时创建 issue 或提交 pull request。