package system import ( "bufio" "fmt" "os" "os/exec" "strings" "time" ) // ConfigureSysctl 设置内核参数 // 参数: params - 键值对映射,如 {"net.ipv4.ip_forward": "1"} // 返回: error - 第一个失败的错误 func ConfigureSysctl(params map[string]string) error { if len(params) == 0 { return nil } // 首先应用临时配置 for k, v := range params { cmd := exec.Command("sysctl", "-w", fmt.Sprintf("%s=%s", k, v)) cmd.Stdout = os.Stdout cmd.Stderr = os.Stderr if err := cmd.Run(); err != nil { return fmt.Errorf("设置 sysctl %s=%s 失败: %v", k, v, err) } } // 持久化配置到 /etc/sysctl.conf 或 /etc/sysctl.d/ return appendToSysctlConf(params) } // appendToSysctlConf 将参数写入持久化配置文件 func appendToSysctlConf(params map[string]string) error { const sysctlFile = "/etc/sysctl.d/99-sunhpc.conf" // 读取现有配置 existing := make(map[string]bool) if data, err := os.ReadFile(sysctlFile); err == nil { scanner := bufio.NewScanner(strings.NewReader(string(data))) for scanner.Scan() { line := strings.TrimSpace(scanner.Text()) if line == "" || strings.HasPrefix(line, "#") { continue } parts := strings.SplitN(line, "=", 2) if len(parts) == 2 { existing[strings.TrimSpace(parts[0])] = true } } } // 构建新内容 var content strings.Builder content.WriteString("# SunHPC 系统优化配置\n") content.WriteString("# 生成时间: " + time.Now().Format(time.RFC3339) + "\n\n") for k, v := range params { // 跳过已存在的配置(避免重复) if existing[k] { continue } content.WriteString(fmt.Sprintf("%s = %s\n", k, v)) } // 如果有新配置才写入 if content.Len() > 100 { if err := os.WriteFile(sysctlFile, []byte(content.String()), 0644); err != nil { return err } // 应用持久化配置 return exec.Command("sysctl", "--system").Run() } return nil } // GetSysctl 获取当前内核参数值 func GetSysctl(key string) (string, error) { cmd := exec.Command("sysctl", "-n", key) output, err := cmd.Output() if err != nil { return "", err } return strings.TrimSpace(string(output)), nil }