46 lines
1.0 KiB
Go
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:]
|
|
}
|