diff --git a/service.go b/service.go index 64f1b40..8d4f61e 100644 --- a/service.go +++ b/service.go @@ -10,6 +10,105 @@ // despite the substantial differences. // It also can be used to detect how a program is called, from an interactive // terminal or from a service manager. +/* + // Simple service that only works by printing a log message every few seconds. + package main + + import ( + "log" + "os" + "time" + + "bitbucket.org/kardianos/service2beta" + ) + + var logger service.Logger + + // Program structures. + // Define Start and Stop methods. + type program struct { + exit chan struct{} + } + + func (p *program) Start(s service.Service) error { + if service.Local.Interactive() { + logger.Info("Running in terminal.") + } else { + logger.Info("Running under service manager.") + } + p.exit = make(chan struct{}) + + // Start should not block. Do the actual work async. + go p.run() + return nil + } + func (p *program) run() error { + logger.Infof("I'm running %v.", service.Local) + ticker := time.NewTicker(2 * time.Second) + for { + select { + case tm := <-ticker.C: + logger.Infof("Still running at %v...", tm) + case <-p.exit: + ticker.Stop() + return nil + } + } + return nil + } + func (p *program) Stop(s service.Service) error { + // Any work in Stop should be quick, usually a few seconds at most. + logger.Info("I'm Stopping!") + close(p.exit) + return nil + } + + // Service setup. + // Define service config. + // Create the service. + // Setup the logger. + // Handle service controls (optional). + // Run the service. + func main() { + svcConfig := &service.Config{ + Name: "GoServiceTest", + DisplayName: "Go Service Test", + Description: "This is a test Go service.", + } + + prg := &program{} + s, err := service.New(prg, svcConfig) + if err != nil { + log.Fatal(err) + } + errs := make(chan error, 5) + logger, err = s.Logger(errs) + if err != nil { + log.Fatal(err) + } + go func() { + for { + err := <-errs + if err != nil { + log.Print(err) + } + } + }() + + if len(os.Args) > 1 { + err := service.Control(s, os.Args[1]) + if err != nil { + log.Printf("Valid actions: %q\n", service.ControlAction) + log.Fatal(err) + } + return + } + err = s.Run() + if err != nil { + logger.Error(err) + } + } +*/ package service import (