12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091 |
- package utils
- import (
- "bytes"
- "context"
- "crm-api/pkg/lfshook"
- "os/exec"
- "strings"
- "time"
- )
- // ExecCmdAsync 执行指定命令
- func ExecCmdAsync(cmdName string, arg ...string) (stdOut, errOut string, err error) {
- lfshook.NewLogger().Infof("ExecCmdAsync cmd %s %s", cmdName, arg)
- cmd := exec.Command(cmdName, arg...)
- var stdout, stderr bytes.Buffer
- cmd.Stdout = &stdout
- cmd.Stderr = &stderr
- err = cmd.Run()
- if err != nil {
- lfshook.NewLogger().Errorf("cmd.Run(%s) failed with %s\n", cmdName, err)
- }
- outStr, errStr := stdout.String(), stderr.String()
- if len(outStr) > 0 {
- lfshook.NewLogger().Debugf("cmd.Run(%s) %s", cmdName, outStr)
- }
- if len(errStr) > 0 {
- lfshook.NewLogger().Errorf("cmd.Run(%s)%s", cmdName, errStr)
- }
- return outStr, errStr, err
- }
- // ExecCmd 执行指定命令
- func ExecCmd(cmdName string, arg ...string) (stdOut, errOut string, err error) {
- ///etc/scripts/sysinfo.sh 会不断刷新
- if cmdName != "/etc/scripts/sysinfo.sh" {
- lfshook.NewLogger().Infof("ExecCmd cmd %s %s", cmdName, arg)
- }
- cmd := exec.Command(cmdName, arg...)
- var stdout, stderr bytes.Buffer
- cmd.Stdout = &stdout
- cmd.Stderr = &stderr
- ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
- defer cancel()
- err = cmd.Start()
- if err != nil {
- lfshook.NewLogger().Error(err)
- return "", "", err
- }
- go func() {
- err = cmd.Wait()
- if err != nil {
- lfshook.NewLogger().Errorf("cmd.Wait(%s) %s\n", cmdName, err)
- }
- cancel()
- }()
- <-ctx.Done()
- outStr, errStr := stdout.String(), stderr.String()
- if len(outStr) > 0 {
- lfshook.NewLogger().Debugf("cmd.Start(%s) %s", cmdName, outStr)
- }
- if len(errStr) > 0 {
- lfshook.NewLogger().Errorf("cmd.Start(%s)%s", cmdName, errStr)
- }
- return strings.TrimSpace(outStr), errStr, err
- }
- func Reboot(sleep time.Duration) {
- go func() {
- time.Sleep(sleep * time.Second)
- cmd := "/sbin/reboot"
- output, _ := exec.Command("bash", "-c", cmd).CombinedOutput()
- lfshook.NewLogger().Info(cmd)
- lfshook.NewLogger().Info(string(output))
- }()
- }
- func RunCmd(cmd string) (output []byte, err error) {
- lfshook.NewLogger().Debug(cmd)
- output, err = exec.Command("bash", "-c", cmd).CombinedOutput()
- lfshook.NewLogger().Debug("command res:", string(output), "\n")
- if err != nil {
- lfshook.NewLogger().Error(err)
- }
- return
- }
|