diff --git a/backend/app/api/v1/file.go b/backend/app/api/v1/file.go index 05a82d111..87b293113 100644 --- a/backend/app/api/v1/file.go +++ b/backend/app/api/v1/file.go @@ -520,7 +520,6 @@ func (b *BaseApi) Size(c *gin.Context) { // @Success 200 {string} content // @Security ApiKeyAuth // @Router /files/loadfile [post] -// @x-panel-log {"bodyKeys":["path"],"paramKeys":[],"BeforeFuntions":[],"formatZH":"读取文件 [path]","formatEN":"Read file [path]"} func (b *BaseApi) LoadFromFile(c *gin.Context) { var req dto.FilePath if err := c.ShouldBindJSON(&req); err != nil { diff --git a/backend/app/service/cronjob_helper.go b/backend/app/service/cronjob_helper.go index 8fe5cee1a..a9281ed95 100644 --- a/backend/app/service/cronjob_helper.go +++ b/backend/app/service/cronjob_helper.go @@ -29,7 +29,7 @@ func (u *CronjobService) HandleJob(cronjob *model.Cronjob) { if len(cronjob.Script) == 0 { return } - stdout, errExec := cmd.ExecWithTimeOut(cronjob.Script, 5*time.Minute) + stdout, errExec := cmd.ExecCronjobWithTimeOut(cronjob.Script, 5*time.Minute) if errExec != nil { err = errExec } diff --git a/backend/utils/cmd/cmd.go b/backend/utils/cmd/cmd.go index 83f2857fd..4c8cbdf67 100644 --- a/backend/utils/cmd/cmd.go +++ b/backend/utils/cmd/cmd.go @@ -67,6 +67,32 @@ func ExecWithTimeOut(cmdStr string, timeout time.Duration) (string, error) { return stdout.String(), nil } +func ExecCronjobWithTimeOut(cmdStr string, timeout time.Duration) (string, error) { + ctx, cancel := context.WithTimeout(context.Background(), timeout) + defer cancel() + cmd := exec.Command("bash", "-c", cmdStr) + var stdout, stderr bytes.Buffer + cmd.Stdout = &stdout + cmd.Stderr = &stderr + err := cmd.Run() + if ctx.Err() == context.DeadlineExceeded { + return "", buserr.New(constant.ErrCmdTimeout) + } + + errMsg := "" + if len(stderr.String()) != 0 { + errMsg = fmt.Sprintf("stderr:\n %s", stderr.String()) + } + if len(stdout.String()) != 0 { + if len(errMsg) != 0 { + errMsg = fmt.Sprintf("%s \n\n; stdout:\n %s", errMsg, stdout.String()) + } else { + errMsg = fmt.Sprintf("stdout\n: %s", stdout.String()) + } + } + return errMsg, err +} + func Execf(cmdStr string, a ...interface{}) (string, error) { cmd := exec.Command("bash", "-c", fmt.Sprintf(cmdStr, a...)) var stdout, stderr bytes.Buffer diff --git a/frontend/src/views/cronjob/record/index.vue b/frontend/src/views/cronjob/record/index.vue index fbdcacc4e..9ce01d4e7 100644 --- a/frontend/src/views/cronjob/record/index.vue +++ b/frontend/src/views/cronjob/record/index.vue @@ -515,6 +515,7 @@ const onRefresh = async () => { records.value = res.data.items; hasRecords.value = true; currentRecord.value = records.value[0]; + loadRecord(currentRecord.value); } else { records.value = []; hasRecords.value = false;