diff --git a/cmd/agent/main.go b/cmd/agent/main.go index 817ab2c..6dee7fe 100644 --- a/cmd/agent/main.go +++ b/cmd/agent/main.go @@ -71,9 +71,9 @@ var agentCmd = &cobra.Command{ Use: "agent", Run: func(cmd *cobra.Command, args []string) { if runtime.GOOS == "darwin" { - run() // macOS launchctl 如使用 runService 则无法启动,原因未知 + run() // https://github.com/golang/go/issues/59229 } else { - runService("") + runService("", nil) } }, PreRun: preRun, @@ -146,14 +146,14 @@ func init() { agentCmd.PersistentFlags().StringVarP(&agentCliParam.Server, "server", "s", "localhost:5555", "管理面板RPC端口") agentCmd.PersistentFlags().StringVarP(&agentCliParam.ClientSecret, "password", "p", "", "Agent连接Secret") agentCmd.PersistentFlags().BoolVar(&agentCliParam.TLS, "tls", false, "启用SSL/TLS加密") - agentCmd.Flags().BoolVarP(&agentCliParam.Debug, "debug", "d", false, "开启调试信息") - agentCmd.Flags().IntVar(&agentCliParam.ReportDelay, "report-delay", 1, "系统状态上报间隔") - agentCmd.Flags().BoolVar(&agentCliParam.SkipConnectionCount, "skip-conn", false, "不监控连接数") - agentCmd.Flags().BoolVar(&agentCliParam.SkipProcsCount, "skip-procs", false, "不监控进程数") - agentCmd.Flags().BoolVar(&agentCliParam.DisableCommandExecute, "disable-command-execute", false, "禁止在此机器上执行命令") - agentCmd.Flags().BoolVar(&agentCliParam.DisableAutoUpdate, "disable-auto-update", false, "禁用自动升级") - agentCmd.Flags().BoolVar(&agentCliParam.DisableForceUpdate, "disable-force-update", false, "禁用强制升级") - agentCmd.Flags().Uint32VarP(&agentCliParam.IPReportPeriod, "ip-report-period", "u", 30*60, "本地IP更新间隔, 上报频率依旧取决于report-delay的值") + agentCmd.PersistentFlags().BoolVarP(&agentCliParam.Debug, "debug", "d", false, "开启调试信息") + agentCmd.PersistentFlags().IntVar(&agentCliParam.ReportDelay, "report-delay", 1, "系统状态上报间隔") + agentCmd.PersistentFlags().BoolVar(&agentCliParam.SkipConnectionCount, "skip-conn", false, "不监控连接数") + agentCmd.PersistentFlags().BoolVar(&agentCliParam.SkipProcsCount, "skip-procs", false, "不监控进程数") + agentCmd.PersistentFlags().BoolVar(&agentCliParam.DisableCommandExecute, "disable-command-execute", false, "禁止在此机器上执行命令") + agentCmd.PersistentFlags().BoolVar(&agentCliParam.DisableAutoUpdate, "disable-auto-update", false, "禁用自动升级") + agentCmd.PersistentFlags().BoolVar(&agentCliParam.DisableForceUpdate, "disable-force-update", false, "禁用强制升级") + agentCmd.PersistentFlags().Uint32VarP(&agentCliParam.IPReportPeriod, "ip-report-period", "u", 30*60, "本地IP更新间隔, 上报频率依旧取决于report-delay的值") agentCmd.Flags().BoolVarP(&agentCliParam.Version, "version", "v", false, "查看当前版本号") agentConfig.Read(filepath.Dir(ex) + "/config.yml") @@ -313,28 +313,18 @@ func run() { } } -func runService(action string) { - var tlsoption string - +func runService(action string, flags []string) { dir, err := os.Getwd() if err != nil { println("获取当前工作目录时出错: ", err) return } - if agentCliParam.TLS { - tlsoption = "--tls" - } - svcConfig := &service.Config{ - Name: "nezha-agent", - DisplayName: "Nezha Agent", - Description: "哪吒探针监控端", - Arguments: []string{ - "-s", agentCliParam.Server, - "-p", agentCliParam.ClientSecret, - tlsoption, - }, + Name: "nezha-agent", + DisplayName: "Nezha Agent", + Description: "哪吒探针监控端", + Arguments: flags, WorkingDirectory: dir, } diff --git a/cmd/agent/service.go b/cmd/agent/service.go index 3ba3423..6f71764 100644 --- a/cmd/agent/service.go +++ b/cmd/agent/service.go @@ -1,11 +1,18 @@ package main import ( + "fmt" "os" "github.com/spf13/cobra" ) +type AgentCliFlags struct { + IsSpecified bool + Flag string + Value string +} + var serviceCmd = &cobra.Command{ Use: "service ", Short: "服务与自启动设置", @@ -33,6 +40,32 @@ func servicePreRun(cmd *cobra.Command, args []string) { } func serviceActions(cmd *cobra.Command, args []string) { + var agentCliFlags []string + + flags := []AgentCliFlags{ + {agentCliParam.Server != "localhost:5555", "-s", agentCliParam.Server}, + {agentCliParam.ClientSecret != "", "-p", agentCliParam.ClientSecret}, + {agentCliParam.TLS, "--tls", ""}, + {agentCliParam.Debug, "-d", ""}, + {agentCliParam.ReportDelay != 1, "--report-delay", fmt.Sprint(agentCliParam.ReportDelay)}, + {agentCliParam.SkipConnectionCount, "--skip-conn", ""}, + {agentCliParam.SkipProcsCount, "--skip-procs", ""}, + {agentCliParam.DisableCommandExecute, "--disable-command-execute", ""}, + {agentCliParam.DisableAutoUpdate, "--disable-auto-update", ""}, + {agentCliParam.DisableForceUpdate, "--disable-force-update", ""}, + {agentCliParam.IPReportPeriod != 30*60, "-u", fmt.Sprint(agentCliParam.IPReportPeriod)}, + } + + for _, f := range flags { + if f.IsSpecified { + if f.Value == "" { + agentCliFlags = append(agentCliFlags, f.Flag) + } else { + agentCliFlags = append(agentCliFlags, f.Flag, f.Value) + } + } + } + action := args[0] - runService(action) + runService(action, agentCliFlags) }