Skip to content

Instantly share code, notes, and snippets.

@ik5
Created October 11, 2014 11:39
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save ik5/4cf71d7011ec4d16954f to your computer and use it in GitHub Desktop.
Save ik5/4cf71d7011ec4d16954f to your computer and use it in GitHub Desktop.
testing a daemon tool
package main
import (
"errors"
"fmt"
"github.com/takama/daemon"
"log"
"os"
"os/signal"
"syscall"
)
type Srv struct {
daemon.Daemon
}
func (srv *Srv) Init() (string, error) {
usage := "Usage: daemon | install | remove| start | stop | status"
if len(os.Args) > 1 {
cmd := os.Args[1]
switch cmd {
case "install":
return srv.Install()
case "remove":
return srv.Remove()
case "start":
return srv.Start()
case "stop":
return srv.Stop()
case "status":
return srv.Status()
default:
return "", errors.New(usage)
}
}
interrupt := make(chan os.Signal, 1)
signal.Notify(interrupt, os.Interrupt, os.Kill, syscall.SIGTERM)
for {
select {
case killSignal := <-interrupt:
log.Println("Got signal:", killSignal)
log.Println("Stopping execution")
if killSignal == os.Interrupt {
return "Daemon was interruped by system signal", nil
}
return "Daemon was killed", nil
}
}
return "", errors.New(usage)
}
func main() {
srv, err := daemon.New("daemon", "Testing daemon")
if err != nil {
fmt.Println("Error: ", err)
os.Exit(1)
}
service := &Srv{srv}
status, err := service.Init()
if err != nil {
fmt.Println(status, "\nError: ", err)
os.Exit(2)
}
fmt.Println(status)
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment