package frpLogger import ( "fmt" "os" "os/exec" "runtime" "strings" ) func GetInitSystem() string { if runtime.GOOS == "windows" { return "windows" } if runtime.GOOS == "linux" { if _, err := os.Stat("/run/systemd/system"); err == nil { return "systemd" } if _, err := os.Stat("/etc/init.d"); err == nil { return "init.d" } } return "unknown" } func IsInstanceRunning(instanceID int) bool { initType := GetInitSystem() serviceName, err := GetServiceNameByInstanceID(instanceID) if err != nil { return false } switch initType { case "windows": cmd := exec.Command("sc", "query", serviceName) output, err := cmd.CombinedOutput() if err != nil { return false } return strings.Contains(string(output), "RUNNING") case "systemd": cmd := exec.Command("systemctl", "is-active", serviceName) output, err := cmd.CombinedOutput() if err != nil { return false } return strings.TrimSpace(string(output)) == "active" case "init.d": servicePath := fmt.Sprintf("/etc/init.d/%s", serviceName) if _, err := os.Stat(servicePath); err != nil { return false } cmd := exec.Command(servicePath, "status") output, err := cmd.CombinedOutput() if err != nil { return false } return strings.Contains(string(output), "is running") default: return false } }