From 52ec3b9887c20b6fe29c353022c20b28af7e2fa0 Mon Sep 17 00:00:00 2001 From: ChengPlay <31820853+zhengkunwang223@users.noreply.github.com> Date: Thu, 17 Apr 2025 22:22:24 +0800 Subject: [PATCH] feat: Supervisor supports automatic restart configuration. (#8413) Refs https://github.com/1Panel-dev/1Panel/issues/7406 --- agent/app/dto/request/host_tool.go | 13 +++++++------ agent/app/dto/response/host_tool.go | 15 ++++++++------- agent/app/service/host_tool.go | 7 ++++++- agent/i18n/lang/zh.yaml | 1 + frontend/src/api/interface/host-tool.ts | 1 + frontend/src/lang/modules/en.ts | 2 ++ frontend/src/lang/modules/ja.ts | 2 ++ frontend/src/lang/modules/ko.ts | 2 ++ frontend/src/lang/modules/ms.ts | 2 ++ frontend/src/lang/modules/pt-br.ts | 2 ++ frontend/src/lang/modules/ru.ts | 2 ++ frontend/src/lang/modules/zh-Hant.ts | 2 ++ frontend/src/lang/modules/zh.ts | 2 ++ .../src/views/toolbox/supervisor/create/index.vue | 5 +++++ 14 files changed, 44 insertions(+), 14 deletions(-) diff --git a/agent/app/dto/request/host_tool.go b/agent/app/dto/request/host_tool.go index 9d602a19a..bbd9ee691 100644 --- a/agent/app/dto/request/host_tool.go +++ b/agent/app/dto/request/host_tool.go @@ -26,12 +26,13 @@ type HostToolConfig struct { } type SupervisorProcessConfig struct { - Name string `json:"name"` - Operate string `json:"operate"` - Command string `json:"command"` - User string `json:"user"` - Dir string `json:"dir"` - Numprocs string `json:"numprocs"` + Name string `json:"name"` + Operate string `json:"operate"` + Command string `json:"command"` + User string `json:"user"` + Dir string `json:"dir"` + Numprocs string `json:"numprocs"` + AutoRestart string `json:"autoRestart"` } type SupervisorProcessFileReq struct { diff --git a/agent/app/dto/response/host_tool.go b/agent/app/dto/response/host_tool.go index e97a675d8..0c7783736 100644 --- a/agent/app/dto/response/host_tool.go +++ b/agent/app/dto/response/host_tool.go @@ -23,13 +23,14 @@ type HostToolConfig struct { } type SupervisorProcessConfig struct { - Name string `json:"name"` - Command string `json:"command"` - User string `json:"user"` - Dir string `json:"dir"` - Numprocs string `json:"numprocs"` - Msg string `json:"msg"` - Status []ProcessStatus `json:"status"` + Name string `json:"name"` + Command string `json:"command"` + User string `json:"user"` + Dir string `json:"dir"` + Numprocs string `json:"numprocs"` + Msg string `json:"msg"` + Status []ProcessStatus `json:"status"` + AutoRestart string `json:"autoRestart"` } type ProcessStatus struct { diff --git a/agent/app/service/host_tool.go b/agent/app/service/host_tool.go index bf29a2099..145deb40a 100644 --- a/agent/app/service/host_tool.go +++ b/agent/app/service/host_tool.go @@ -322,7 +322,7 @@ func handleProcess(supervisordDir string, req request.SupervisorProcessConfig, c } _, _ = section.NewKey("command", strings.TrimSpace(req.Command)) _, _ = section.NewKey("directory", req.Dir) - _, _ = section.NewKey("autorestart", "true") + _, _ = section.NewKey("autorestart", req.AutoRestart) _, _ = section.NewKey("startsecs", "3") _, _ = section.NewKey("stdout_logfile", outLog) _, _ = section.NewKey("stderr_logfile", errLog) @@ -358,6 +358,8 @@ func handleProcess(supervisordDir string, req request.SupervisorProcessConfig, c userKey.SetValue(req.User) numprocsKey := section.Key("numprocs") numprocsKey.SetValue(req.Numprocs) + autoRestart := section.Key("autorestart") + autoRestart.SetValue(req.AutoRestart) if err = configFile.SaveTo(iniPath); err != nil { return err @@ -424,6 +426,9 @@ func handleProcessConfig(configDir, containerName string) ([]response.Supervisor if numprocs, _ := section.GetKey("numprocs"); numprocs != nil { config.Numprocs = numprocs.Value() } + if autoRestart, _ := section.GetKey("autorestart"); autoRestart != nil { + config.AutoRestart = autoRestart.Value() + } _ = getProcessStatus(&config, containerName) result = append(result, config) } diff --git a/agent/i18n/lang/zh.yaml b/agent/i18n/lang/zh.yaml index 46ba56905..f4717341a 100644 --- a/agent/i18n/lang/zh.yaml +++ b/agent/i18n/lang/zh.yaml @@ -262,6 +262,7 @@ ErrDBNotExist: "数据库不存在" allow: "允许" deny: "禁止" OpenrestyNotFound: "Openresty 未安装" +remoteIpIsNull: "IP 列表为空" #task TaskStart: "{{ .name }} 任务开始 [START]" diff --git a/frontend/src/api/interface/host-tool.ts b/frontend/src/api/interface/host-tool.ts index 3a5d00b9d..ef3639a00 100644 --- a/frontend/src/api/interface/host-tool.ts +++ b/frontend/src/api/interface/host-tool.ts @@ -42,6 +42,7 @@ export namespace HostTool { dir: string; numprocs: string; status?: ProcessStatus[]; + autoRestart: string; } export interface ProcessStatus { diff --git a/frontend/src/lang/modules/en.ts b/frontend/src/lang/modules/en.ts index cf6a75dfb..d14e41469 100644 --- a/frontend/src/lang/modules/en.ts +++ b/frontend/src/lang/modules/en.ts @@ -2753,6 +2753,7 @@ const message = { ERROR: 'Error', statusCode: 'Status code', manage: 'Management', + autoRestart: 'Auto Restart', }, }, xpack: { @@ -3013,6 +3014,7 @@ const message = { strict: 'Strict Mode', strictHelper: 'Use stricter rules to validate requests', saveLog: 'Save Log', + remoteURLHelper: 'The remote URL needs to ensure one IP per line and no other characters', }, monitor: { name: 'Website Monitoring', diff --git a/frontend/src/lang/modules/ja.ts b/frontend/src/lang/modules/ja.ts index 6470537c5..fe90de8e1 100644 --- a/frontend/src/lang/modules/ja.ts +++ b/frontend/src/lang/modules/ja.ts @@ -2619,6 +2619,7 @@ const message = { ERROR: 'エラー', statusCode: 'ステータスコード', manage: '管理', + autoRestart: '自動再起動', }, }, xpack: { @@ -2873,6 +2874,7 @@ const message = { strict: '厳格モード', strictHelper: 'より厳格なルールを使用してリクエストを検証します', saveLog: 'ログを保存', + remoteURLHelper: 'リモート URL は、1行に1つのIPで、他の文字がないことを保証する必要があります', }, monitor: { name: 'ウェブサイトモニタリング', diff --git a/frontend/src/lang/modules/ko.ts b/frontend/src/lang/modules/ko.ts index 58e870ca3..5a542a3f4 100644 --- a/frontend/src/lang/modules/ko.ts +++ b/frontend/src/lang/modules/ko.ts @@ -2578,6 +2578,7 @@ const message = { ERROR: '오류', statusCode: '상태 코드', manage: '관리', + autoRestart: '자동 재시작', }, }, xpack: { @@ -2828,6 +2829,7 @@ const message = { strict: '엄격 모드', strictHelper: '더 엄격한 규칙을 사용하여 요청을 검증합니다', saveLog: '로그 저장', + remoteURLHelper: '원격 URL은 한 줄에 하나의 IP만 포함하고 다른 문자는 포함하지 않아야 합니다', }, monitor: { name: '웹사이트 모니터링', diff --git a/frontend/src/lang/modules/ms.ts b/frontend/src/lang/modules/ms.ts index 809de4a66..aab819a7b 100644 --- a/frontend/src/lang/modules/ms.ts +++ b/frontend/src/lang/modules/ms.ts @@ -2680,6 +2680,7 @@ const message = { ERROR: 'Ralat', statusCode: 'Kod status', manage: 'Pengurusan', + autoRestart: 'Auto Restart', }, }, xpack: { @@ -2938,6 +2939,7 @@ const message = { strict: 'Mod Strict', strictHelper: 'Gunakan peraturan yang lebih ketat untuk mengesahkan permintaan', saveLog: 'Simpan Log', + remoteURLHelper: 'URL jauh perlu memastikan satu IP setiap baris dan tiada aksara lain', }, monitor: { name: 'Pemantauan Laman Web', diff --git a/frontend/src/lang/modules/pt-br.ts b/frontend/src/lang/modules/pt-br.ts index 47ddf6c99..97258ad84 100644 --- a/frontend/src/lang/modules/pt-br.ts +++ b/frontend/src/lang/modules/pt-br.ts @@ -2677,6 +2677,7 @@ const message = { ERROR: 'Erro', statusCode: 'Código de status', manage: 'Gerenciamento', + autoRestart: 'Reinicialização Automática', }, }, xpack: { @@ -2938,6 +2939,7 @@ const message = { strict: 'Modo estrito', strictHelper: 'Usa regras mais rigorosas para validar solicitações', saveLog: 'Salvar log', + remoteURLHelper: 'O URL remoto precisa garantir um IP por linha e nenhum outro caractere', }, monitor: { name: 'Monitoramento de Websites', diff --git a/frontend/src/lang/modules/ru.ts b/frontend/src/lang/modules/ru.ts index fb938414c..50ca533a1 100644 --- a/frontend/src/lang/modules/ru.ts +++ b/frontend/src/lang/modules/ru.ts @@ -2673,6 +2673,7 @@ const message = { ERROR: 'Ошибка', statusCode: 'Код статуса', manage: 'Управление', + autoRestart: 'Автоматический перезапуск', }, }, xpack: { @@ -2932,6 +2933,7 @@ const message = { strict: 'Строгий режим', strictHelper: 'Использует более строгие правила для проверки запросов', saveLog: 'Сохранить лог', + remoteURLHelper: 'Удаленный URL должен содержать один IP на строку и не содержать других символов', }, monitor: { name: 'Мониторинг веб-сайта', diff --git a/frontend/src/lang/modules/zh-Hant.ts b/frontend/src/lang/modules/zh-Hant.ts index 65140d2ad..ee4943371 100644 --- a/frontend/src/lang/modules/zh-Hant.ts +++ b/frontend/src/lang/modules/zh-Hant.ts @@ -2550,6 +2550,7 @@ const message = { ERROR: '錯誤', statusCode: '狀態碼', manage: '管理', + autoRestart: '自動重啟', }, }, xpack: { @@ -2793,6 +2794,7 @@ const message = { strict: '嚴格模式', strictHelper: '使用更嚴格的規則來校驗請求', saveLog: '保存日誌', + remoteURLHelper: '遠程 URL 需要保證每行一個 IP 並且沒有其他字符', }, monitor: { name: '網站監控', diff --git a/frontend/src/lang/modules/zh.ts b/frontend/src/lang/modules/zh.ts index 732acfe54..0029e8735 100644 --- a/frontend/src/lang/modules/zh.ts +++ b/frontend/src/lang/modules/zh.ts @@ -2542,6 +2542,7 @@ const message = { ERROR: '错误', statusCode: '状态码', manage: '管理', + autoRestart: '自动重启', }, }, xpack: { @@ -2782,6 +2783,7 @@ const message = { strict: '严格模式', strictHelper: '使用更严格的规则来校验请求', saveLog: '保存日志', + remoteURLHelper: '远程 URL 需要保证每行一个 IP 并且没有其他字符', }, monitor: { name: '网站监控', diff --git a/frontend/src/views/toolbox/supervisor/create/index.vue b/frontend/src/views/toolbox/supervisor/create/index.vue index 09b7f6eb3..a4e080976 100644 --- a/frontend/src/views/toolbox/supervisor/create/index.vue +++ b/frontend/src/views/toolbox/supervisor/create/index.vue @@ -30,6 +30,9 @@ + + +