zlh-agent/internal/provision/executil/executil.go
2026-03-20 23:17:19 +00:00

46 lines
1.0 KiB
Go

package executil
import (
"bytes"
"io"
"log"
"os"
"os/exec"
"strings"
)
const ScriptsRoot = "/opt/zlh-agent/scripts"
func RunScript(path string) error {
cmd := exec.Command("/bin/bash", path)
var buf bytes.Buffer
cmd.Stdout = io.MultiWriter(os.Stdout, &buf)
cmd.Stderr = io.MultiWriter(os.Stderr, &buf)
log.Printf("[provision] action=run_script path=%s", path)
if err := cmd.Run(); err != nil {
log.Printf("[provision] action=run_script status=failed path=%s err=%v", path, err)
for _, line := range tailLogLines(buf.String(), 10) {
log.Printf("[provision] path=%s output=%s", path, line)
}
return err
}
log.Printf("[provision] action=run_script status=ok path=%s", path)
return nil
}
func tailLogLines(raw string, max int) []string {
lines := strings.Split(strings.ReplaceAll(raw, "\r\n", "\n"), "\n")
out := make([]string, 0, max)
for _, line := range lines {
line = strings.TrimSpace(line)
if line == "" {
continue
}
out = append(out, line)
}
if len(out) <= max {
return out
}
return out[len(out)-max:]
}