安装需要使用的库

1
$ go get github.com/kardianos/service

按照例子写一个简单的服务

定义一个结构体,实现Start, Stop接口。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
type program struct{}

func (p *program) Start(s service.Service) error {
logger.Info("start running")
go p.run()
return nil
}
func (p *program) run() {
// Do work here
}
func (p *program) Stop(s service.Service) error {
logger.Info("stop running")
return nil
}

func main() {
svcFlag := flag.String("service", "", "Control the system service.")
flag.Parse()

svcConfig := &service.Config{
Name: "GoServiceExampleSimple",
DisplayName: "Go Service Example",
Description: "This is an example Go service.",
}

prg := &program{}
s, err := service.New(prg, svcConfig)
if err != nil {
log.Fatal(err)
}
logger, err = s.Logger(nil)
if err != nil {
log.Fatal(err)
}
if len(*svcFlag) != 0 {
err := service.Control(s, *svcFlag)
if err != nil {
log.Printf("Valid actions: %q\n", service.ControlAction)
log.Fatal(err)
}
return
}
err = s.Run()
if err != nil {
logger.Error(err)
}
}

构建

1
$ go build -o service-demo.exe main.go

安装服务

1
$ ./service-demo.exe -service install

安装后运行services.msc,在服务列表中可以找到我们的服务。

其他命令参数有start, stop, uninstall

1
Valid actions: ["start" "stop" "restart" "install" "uninstall"]

完整的代码在这里