本文讲解如何使用kardianos/service包将golang应用程序制作成系统服务
go get -u github.com/kardianos/service
package main
import (
"github.com/kardianos/service"
"log"
"time"
)
var logger service.Logger
// 创建一个新的program并实现Start、run、Stop三个方法
type program struct{}
func (p *program) Start(s service.Service) error {
// Start should not block. Do the actual work async.
go p.run()
return nil
}
func (p *program) run() {
// Do work here
for {
log.Println(time.Now())
time.Sleep(time.Second * 5)
}
}
func (p *program) Stop(s service.Service) error {
// Stop should not block. Return with a few seconds.
return nil
}
func main() {
svcConfig := &service.Config{
Name: "my_go_service", // 服务名称
DisplayName: "my_go_service", // 显示名称
Description: "golang test 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)
}
err = s.Run() // 启动
if err != nil {
logger.Error(err)
}
}
go build main.go
构建windows exe应用程序并放到一个指定的目录如C:/go_test_service
添加服务cmd运行命令
sc create go_test_service binpath= C:/go_test_service/main.exe type= own start= auto displayname= go_test_service
删除服务cmd运行命令
sc delete go_test_service