From 0b37200b15ecc2aa9f68614b5729f4bbb4a4934d Mon Sep 17 00:00:00 2001 From: "qcqcqc@wsl" <1220204124@zust.edu.cn> Date: Wed, 23 Apr 2025 11:04:50 +0800 Subject: [PATCH] =?UTF-8?q?=E9=83=A8=E5=88=86=E4=BB=A3=E7=A0=81=E4=BC=98?= =?UTF-8?q?=E5=8C=96=EF=BC=8C=E6=94=AF=E6=8C=81-quit=E5=8F=82=E6=95=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- backend-service/cmd/main.go | 13 +++++++++++++ backend-service/pkg/service/configManager.go | 8 ++++++-- backend-service/pkg/service/service.go | 3 +++ backend-service/pkg/service/socket.go | 11 +++++++++++ shared/pkg/constants/constants.go | 1 + shared/pkg/logger/logger.go | 4 +--- 6 files changed, 35 insertions(+), 5 deletions(-) diff --git a/backend-service/cmd/main.go b/backend-service/cmd/main.go index 2005b87..897a543 100644 --- a/backend-service/cmd/main.go +++ b/backend-service/cmd/main.go @@ -40,6 +40,15 @@ func isDebug() bool { return false } +func isQuit() bool { + for _, arg := range os.Args[1:] { + if arg == constants.QuitFlag { + return true + } + } + return false +} + func init() { // 初始化配置 @@ -137,6 +146,10 @@ func main() { logger.Error("Error stopping daemon.") return } + if isQuit() { + logger.Debug("Force quit...") + return + } } if err := run(); err != nil { logger.Error("Application failed: %v", err) diff --git a/backend-service/pkg/service/configManager.go b/backend-service/pkg/service/configManager.go index 0781e22..c4c005a 100644 --- a/backend-service/pkg/service/configManager.go +++ b/backend-service/pkg/service/configManager.go @@ -18,9 +18,13 @@ type ConfigManagerTask struct { } func NewConfigManagerTask() *ConfigManagerTask { - d := viper.GetInt64("bash_config.watch_interval") + d := viper.GetDuration("bash_config.watch_interval") + if d < 1*time.Hour { + d = 1 * time.Hour // 默认值为1小时 + } + logger.Info("ConfigManagerTask watch interval: %v", d) return &ConfigManagerTask{ - manager: manager.NewConfigManager(constants.ConfigFile, time.Duration(d)*time.Second), + manager: manager.NewConfigManager(constants.ConfigFile, d), } } diff --git a/backend-service/pkg/service/service.go b/backend-service/pkg/service/service.go index 1088890..25b0806 100644 --- a/backend-service/pkg/service/service.go +++ b/backend-service/pkg/service/service.go @@ -53,6 +53,8 @@ func (wp *WorkerPool) Start() { // Stop 停止所有任务 func (wp *WorkerPool) Stop() { + logger.Info("Stopping all tasks") + // 取消上下文以通知所有任务停止 wp.cancel() wp.wg.Wait() } @@ -68,6 +70,7 @@ func NewService() *Service { NewConfigManagerTask(), // 添加配置管理器任务 // NewWelcomeTask(), NewUnixSocketTask(), + NewVersionCheckTask(), } return &Service{ diff --git a/backend-service/pkg/service/socket.go b/backend-service/pkg/service/socket.go index 9101f52..b88e9af 100644 --- a/backend-service/pkg/service/socket.go +++ b/backend-service/pkg/service/socket.go @@ -8,6 +8,7 @@ import ( "encoding/binary" "net" "os" + "path/filepath" "strings" "time" ) @@ -32,6 +33,16 @@ func NewUnixSocketTask() *UnixSocketTask { func (t *UnixSocketTask) Execute(ctx context.Context) { socketPath := constants.SocketPath + // 确保socket文件所在目录存在 + socketDir := filepath.Dir(socketPath) + if _, err := os.Stat(socketDir); os.IsNotExist(err) { + // 目录不存在,创建目录 + if err := os.MkdirAll(socketDir, 0755); err != nil { + logger.Error("创建socket目录失败: %v\n", err) + return + } + } + // 删除已存在的socket文件 os.Remove(socketPath) diff --git a/shared/pkg/constants/constants.go b/shared/pkg/constants/constants.go index dc2c296..75a53f1 100644 --- a/shared/pkg/constants/constants.go +++ b/shared/pkg/constants/constants.go @@ -14,6 +14,7 @@ const ( DaemonFlag = "-daemon" // 后台进程标志 ForceFlag = "-force" // 强制结束之前的后台进程 DebugFlag = "-debug" // 强制结束之前的后台进程 + QuitFlag = "-quit" // 强制结束并退出 ConfigFileMode = 0644 // 文件权限 ConfigPath = "./config" // 配置文件路径 LogFileMode = 0755 // 日志文件权限 diff --git a/shared/pkg/logger/logger.go b/shared/pkg/logger/logger.go index e7c3ece..2b5f554 100644 --- a/shared/pkg/logger/logger.go +++ b/shared/pkg/logger/logger.go @@ -84,9 +84,6 @@ func getLogLevelFromConfig() LogLevel { } func init() { - // 设置当前日志级别 - currentLevel = getLogLevelFromConfig() - infoLogger = log.New(&LogWriter{prefix: "INFO", color: constants.ColorGreen, level: INFO}, "", 0) debugLogger = log.New(&LogWriter{prefix: "DEBUG", color: constants.ColorBlue, level: DEBUG}, "", 0) errorLogger = log.New(&LogWriter{prefix: "ERROR", color: constants.ColorRed, level: ERROR}, "", 0) @@ -96,6 +93,7 @@ func init() { // UpdateLogLevel 更新日志级别 func UpdateLogLevel() { currentLevel = getLogLevelFromConfig() + Debug("Log level set to: %d", currentLevel) } // 辅助函数封装