func flagParse() { flDaemon := flag.Bool([]string{"D", "-daemon"}, false, "Enable daemon mode") flVersion := flag.Bool([]string{"V", "-version"}, false, "Show version") flToken := flag.String([]string{"-token"}, "", "user token") flag.Usage = cmd.ShowUsage //flag.PrintDefaults() flag.Parse() //fmt.Printf("run daemon: %v, version: %v\n", *flDaemon, *flVersion) if *flVersion { fmt.Println("datahub", ds.DATAHUB_VERSION) os.Exit(0) } if len(*flToken) == 40 { daemonigo.Token = *flToken daemon.DaemonID = *flToken } if *flDaemon { runDaemon = true } }
// This function wraps application with daemonization. // Returns isDaemon value to distinguish parent and daemonized processes. func Daemonize() (isDaemon bool, err error) { const errLoc = "daemonigo.Daemonize()" isDaemon = os.Getenv(EnvVarName) == EnvVarValue log.Println("IsDaemon: ", isDaemon) if WorkDir != "" { if err = os.Chdir(WorkDir); err != nil { err = fmt.Errorf( "%s: changing working directory failed, reason -> %s", errLoc, err.Error(), ) return } } if isDaemon { oldmask := syscall.Umask(int(Umask)) defer syscall.Umask(oldmask) if _, err = syscall.Setsid(); err != nil { err = fmt.Errorf( "%s: setsid failed, reason -> %s", errLoc, err.Error(), ) return } if pidFile, err = lockPidFile(); err != nil { err = fmt.Errorf( "%s: locking PID file failed, reason -> %s", errLoc, err.Error(), ) } } else { flag.Usage = func() { arr := make([]string, 0, len(actions)) for k, _ := range actions { arr = append(arr, k) } fmt.Fprintf(os.Stderr, "Usage: %s {%s}\n", os.Args[0], strings.Join(arr, "|"), ) flag.PrintDefaults() } if !flag.Parsed() { log.Printf(" flag.Parse\n") flag.Parse() } //fmt.Printf("after flag.Parse\n") //fmt.Printf("flag.Arg(0):%s\n", flag.Arg(0)) //action, exist := actions[flag.Arg(0)] action, exist := actions["daemon"] //fmt.Println("exist:", exist) if exist { action() } else { flag.Usage() } } return }
func flagParse() { flDaemon := flag.Bool([]string{"D", "-daemon"}, false, "Enable daemon mode") flVersion := flag.Bool([]string{"V", "-version"}, false, "Show version") flag.Usage = client.ShowUsage //flag.PrintDefaults() flag.Parse() //fmt.Printf("run daemon: %v, version: %v\n", *flDaemon, *flVersion) if *flVersion { fmt.Println("datahub v0.1.0") os.Exit(0) } if *flDaemon { runDaemon = true } }