Support more flags in the service command (#23)

fix for darwin
This commit is contained in:
UUBulb 2024-05-31 21:38:45 +08:00 committed by GitHub
parent f882ca3498
commit 611ad8be20
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 49 additions and 26 deletions

View File

@ -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,
}

View File

@ -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 <install/uninstall/start/stop/restart>",
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)
}