核心代码如下:
package main import ( "fmt" "github.com/kardianos/service" "log" "os" ) type Program struct{ } func (p *Program) Start(s service.Service) error { log.Println("开始服务") go p.run(s) return nil } func (p *Program) Stop(s service.Service) error { log.Println("停止服务") return nil } func (p *Program) run(s service.Service) { // 用于记录系统日志 logger, err := s.Logger(nil) if err != nil { log.Fatal(err) } // 获取程序根目录 rootPath, err := filepath.Abs(filepath.Dir(os.Args[0])) if err != nil { logger.Error(err) } // 更新程序运行当前目录 os.Chdir(rootPath) // 此处编写具体的服务代码 // ...... } var serviceConfig = &service.Config{ Name: "serviceName", DisplayName: "service Display Name", Description: "service description", } func main() { // 构建服务对象 prog := &Program{} s, err := service.New(prog, serviceConfig) if err != nil { log.Fatal(err) } // 用于记录系统日志 logger, err := s.Logger(nil) if err != nil { log.Fatal(err) } if len(os.Args) < 2 { err = s.Run() if err != nil { logger.Error(err) } return } cmd := os.Args[1] if cmd == "install" { err = s.Install() if err != nil { logger.Error(err) return } fmt.Println("安装成功") return } if cmd == "uninstall" { err = s.Uninstall() if err != nil { logger.Error(err) return } fmt.Println("卸载成功") return } if cmd == "start" { err = s.Start() if err != nil { logger.Error(err) return } fmt.Println("服务启动成功") return } if cmd == "stop" { err = s.Stop() if err != nil { logger.Error(err) return } fmt.Println("服务关闭成功") return } if cmd == "restart" { err = s.Stop() if err != nil { logger.Error(err) return } fmt.Println("服务重启成功") return } if cmd == "status" { status, err := s.Status() if err != nil { logger.Error(err) return } switch status { case 1: fmt.Println("服务正在运行") case 2: fmt.Println("服务已经停止") default: fmt.Println("未知状态") } return } if cmd != "help" { fmt.Println("未知操作命令:"+cmd) } fmt.Println("============ 帮助信息 ============") fmt.Println("install 安装服务") fmt.Println("uninstall 卸载服务") fmt.Println("start 启动服务") fmt.Println("stop 关闭服务") fmt.Println("restart 重启服务") fmt.Println("status 查看服务状态") fmt.Println("help 查看帮助") fmt.Println("===================================") // install, uninstall, start, stop 的另一种实现方式 // err = service.Control(s, os.Args[1]) // if err != nil { // log.Fatal(err) // } }