func init() { var err error interactive, err = svc.IsAnInteractiveSession() if err != nil { panic(err) } }
// Returns true if we detected that we are not running in a non-interactive session, and so // launched the service. This function will not return until the service exits. func RunAsService(handler func()) bool { interactive, err := svc.IsAnInteractiveSession() if err != nil { log.Fatalf("failed to determine if we are running in an interactive session: %v", err) return false } if interactive { return false } serviceName := "" // this doesn't matter when we are a "single-process" service service := &myservice{ handler: handler, } svc.Run(serviceName, service) return true }
func main() { const svcName = "HUUZKEE" const svcDesc = "HUUZKEE Service" isIntSess, err := svc.IsAnInteractiveSession() if err != nil { log.Fatalf("failed to determine if we are running in an interactive session: %v", err) } if !isIntSess { runService(svcName, false) return } if len(os.Args) < 2 { usage("no command specified") } cmd := strings.ToLower(os.Args[1]) switch cmd { case "debug": runService(svcName, true) return case "install": err = installService(svcName, svcDesc) case "remove": err = removeService(svcName) case "start": err = startService(svcName) case "stop": err = controlService(svcName, svc.Stop, svc.Stopped) case "pause": err = controlService(svcName, svc.Pause, svc.Paused) case "continue": err = controlService(svcName, svc.Continue, svc.Running) default: usage(fmt.Sprintf("invalid command %s", cmd)) } if err != nil { log.Fatalf("failed to %s %s: %v", cmd, svcName, err) } return }
func IsAnInteractiveSession() (bool, error) { return svc.IsAnInteractiveSession() }