From 433a911ef67c609e99a812dad36f3a5a49af2446 Mon Sep 17 00:00:00 2001 From: CityFun <31820853+zhengkunwang223@users.noreply.github.com> Date: Fri, 23 May 2025 14:50:12 +0800 Subject: [PATCH] fix: fix issue with agent cpu usage error (#8792) Refs https://github.com/1Panel-dev/1Panel/issues/8742 --- agent/utils/cmd/cmdx.go | 38 +++++++++++++++------------- frontend/src/lang/modules/en.ts | 1 + frontend/src/lang/modules/ja.ts | 1 + frontend/src/lang/modules/ko.ts | 1 + frontend/src/lang/modules/ms.ts | 1 + frontend/src/lang/modules/pt-br.ts | 1 + frontend/src/lang/modules/ru.ts | 1 + frontend/src/lang/modules/zh-Hant.ts | 1 + frontend/src/lang/modules/zh.ts | 1 + 9 files changed, 28 insertions(+), 18 deletions(-) diff --git a/agent/utils/cmd/cmdx.go b/agent/utils/cmd/cmdx.go index 4e35b4e74..276a76651 100644 --- a/agent/utils/cmd/cmdx.go +++ b/agent/utils/cmd/cmdx.go @@ -2,6 +2,8 @@ package cmd import ( "bytes" + "context" + "errors" "fmt" "log" "os" @@ -89,7 +91,17 @@ func (c *CommandHelper) RunWithStdoutBashCf(command string, arg ...interface{}) } func (c *CommandHelper) run(name string, arg ...string) (string, error) { - cmd := exec.Command(name, arg...) + var cmd *exec.Cmd + var ctx context.Context + var cancel context.CancelFunc + + if c.timeout != 0 { + ctx, cancel = context.WithTimeout(context.Background(), c.timeout) + defer cancel() + cmd = exec.CommandContext(ctx, name, arg...) + } else { + cmd = exec.Command(name, arg...) + } customWriter := &CustomWriter{taskItem: c.taskItem} var stdout, stderr bytes.Buffer @@ -122,25 +134,15 @@ func (c *CommandHelper) run(name string, arg ...string) (string, error) { } if c.timeout != 0 { - if err := cmd.Start(); err != nil { - return "", err + err := cmd.Run() + if c.taskItem != nil { + customWriter.Flush() } - done := make(chan error, 1) - go func() { - done <- cmd.Wait() - if c.taskItem != nil { - customWriter.Flush() - } - }() - after := time.After(c.timeout) - select { - case <-after: - _ = cmd.Process.Kill() + if ctx != nil && errors.Is(ctx.Err(), context.DeadlineExceeded) { return "", buserr.New("ErrCmdTimeout") - case err := <-done: - if err != nil { - return handleErr(stdout, stderr, err) - } + } + if err != nil { + return handleErr(stdout, stderr, err) } return stdout.String(), nil } diff --git a/frontend/src/lang/modules/en.ts b/frontend/src/lang/modules/en.ts index f5bcb2902..a6d6950ab 100644 --- a/frontend/src/lang/modules/en.ts +++ b/frontend/src/lang/modules/en.ts @@ -2821,6 +2821,7 @@ const message = { statusCode: 'Status code', manage: 'Management', autoRestart: 'Auto Restart', + EXITED: 'Exited', }, }, xpack: { diff --git a/frontend/src/lang/modules/ja.ts b/frontend/src/lang/modules/ja.ts index 3e8580c4a..b9459bbd6 100644 --- a/frontend/src/lang/modules/ja.ts +++ b/frontend/src/lang/modules/ja.ts @@ -2687,6 +2687,7 @@ const message = { statusCode: 'ステータスコード', manage: '管理', autoRestart: '自動再起動', + EXITED: '終了しました', }, }, xpack: { diff --git a/frontend/src/lang/modules/ko.ts b/frontend/src/lang/modules/ko.ts index 3b4375e99..fabd454fa 100644 --- a/frontend/src/lang/modules/ko.ts +++ b/frontend/src/lang/modules/ko.ts @@ -2643,6 +2643,7 @@ const message = { statusCode: '상태 코드', manage: '관리', autoRestart: '자동 재시작', + EXITED: '종료됨', }, }, xpack: { diff --git a/frontend/src/lang/modules/ms.ts b/frontend/src/lang/modules/ms.ts index 858bb1d03..cade373a8 100644 --- a/frontend/src/lang/modules/ms.ts +++ b/frontend/src/lang/modules/ms.ts @@ -2747,6 +2747,7 @@ const message = { statusCode: 'Kod status', manage: 'Pengurusan', autoRestart: 'Auto Restart', + EXITED: 'Telah keluar', }, }, xpack: { diff --git a/frontend/src/lang/modules/pt-br.ts b/frontend/src/lang/modules/pt-br.ts index d3ed0e071..dc62d974e 100644 --- a/frontend/src/lang/modules/pt-br.ts +++ b/frontend/src/lang/modules/pt-br.ts @@ -2747,6 +2747,7 @@ const message = { statusCode: 'Código de status', manage: 'Gerenciamento', autoRestart: 'Reinicialização Automática', + EXITED: 'Saiu', }, }, xpack: { diff --git a/frontend/src/lang/modules/ru.ts b/frontend/src/lang/modules/ru.ts index acea29236..d4063094a 100644 --- a/frontend/src/lang/modules/ru.ts +++ b/frontend/src/lang/modules/ru.ts @@ -2740,6 +2740,7 @@ const message = { statusCode: 'Код статуса', manage: 'Управление', autoRestart: 'Автоматический перезапуск', + EXITED: 'Вышел', }, }, xpack: { diff --git a/frontend/src/lang/modules/zh-Hant.ts b/frontend/src/lang/modules/zh-Hant.ts index ecd33689c..b8186a077 100644 --- a/frontend/src/lang/modules/zh-Hant.ts +++ b/frontend/src/lang/modules/zh-Hant.ts @@ -2611,6 +2611,7 @@ const message = { statusCode: '狀態碼', manage: '管理', autoRestart: '自動重啟', + EXITED: '已退出', }, }, xpack: { diff --git a/frontend/src/lang/modules/zh.ts b/frontend/src/lang/modules/zh.ts index f1e240d24..e870ece58 100644 --- a/frontend/src/lang/modules/zh.ts +++ b/frontend/src/lang/modules/zh.ts @@ -2602,6 +2602,7 @@ const message = { statusCode: '状态码', manage: '管理', autoRestart: '自动重启', + EXITED: '已退出', }, }, xpack: {