首页 > 其他分享 >go安装服务

go安装服务

时间:2022-09-21 13:24:07浏览次数:56  
标签:服务 err service nil srv go gin 安装 log

golang 安装程序为服务

package main

import (
    "context"
    "fmt"
    "io"
    "log"
    "net/http"
    "os"
    "path/filepath"

    "github.com/gin-gonic/gin"
    "github.com/kardianos/service"
)

type Services struct {
    Log service.Logger
    Srv *http.Server
    Cfg *service.Config
}

// 获取可执行文件的绝对路径
func ExecPath() string {
    file, e := os.Executable()
    if e != nil {
        log.Printf("Executable file path error : %s\n", e.Error())
    }
    path := filepath.Dir(file)
    return path
}

// 获取 service 对象
func getSrv() service.Service {
    File, err := os.Create(ExecPath() + "/http-server.log")
    if err != nil {
        File = os.Stdout
    }
    defer File.Close()

    log.SetOutput(File)

    s := &Services{
        Cfg: &service.Config{
            Name:        "goWeb",
            DisplayName: "goWeb",
            Description: "基于gin的web服务",
        }}
    serv, er := service.New(s, s.Cfg)
    if er != nil {
        log.Printf("Set logger error:%s\n", er.Error())
    }
    s.Log, er = serv.SystemLogger(nil)
    return serv
}

// 启动windows服务
func (srv *Services) Start(s service.Service) error {
    if srv.Log != nil {
        srv.Log.Info("Start run http server")
    }
    go srv.StarServer()
    return nil
}

// 停止windows服务
func (srv *Services) Stop(s service.Service) error {
    if srv.Log != nil {
        srv.Log.Info("Start stop http server")
    }
    log.Println("Server exiting")
    return srv.Srv.Shutdown(context.Background())
}

// 运行gin web服务
func (srv *Services) StarServer() {
    gin.DisableConsoleColor()
    // 创建记录日志的文件
    f, _ := os.Create(ExecPath() + "/gin.log")
    gin.DefaultWriter = io.MultiWriter(f)
    router := gin.Default()
    router.GET("/test", func(c *gin.Context) {
        c.String(http.StatusOK, "Welcome Gin Server")
    })

    srv.Srv = &http.Server{
        Addr:    ":8089",
        Handler: router,
    }
    srv.Srv.ListenAndServe()
}

func main() {
    s := getSrv()
    if len(os.Args) > 1 {
        switch os.Args[1] {
        case "install":
            err := s.Install()
            if err != nil {
                log.Fatalf("Install service error:%s\n", err.Error())
            }
            fmt.Printf("服务已安装")
        case "uninstall":
            err := s.Uninstall()
            if err != nil {
                log.Fatalf("Uninstall service error:%s\n", err.Error())
            }
            fmt.Printf("服务已卸载")
        case "start":
            err := s.Start()
            if err != nil {
                log.Fatalf("Start service error:%s\n", err.Error())
            }
            fmt.Printf("服务已启动")
        case "stop":
            err := s.Stop()
            if err != nil {
                log.Fatalf("top service error:%s\n", err.Error())
            }
            fmt.Printf("服务已关闭")
        }
        return
    }
    err := s.Run()
    if err != nil {
        log.Fatalf("Run programe error:%s\n", err.Error())
    }
}

  

标签:服务,err,service,nil,srv,go,gin,安装,log
From: https://www.cnblogs.com/itsuibi/p/16715243.html

相关文章

  • 基于Kuboard实现k8s单master集群安装
    一、安装要求采用Kuboard方式安装有一定的安装要求:至少2台 2核4G 的服务器CentOS7.6/7.7/7.8/7.9kubernetesv1.19.x版本采用的Docker,而之上的版本使用的是......
  • 【微服务架构设计实施】第一部分:架构篇-1:微服务架构与Spring Cloud介绍
    〇、概述 一、微服务架构与SpringCloud(一)概念不同说法:细粒度的、清凉组件化的小型SOA(面向服务架构)统一说法:小型应用程序(服务组件),使用轻量级设计方法和HTTP协议通信......
  • 获得 Google 数据分析证书后 60 天
    获得Google数据分析证书后60天好日子的读者,GoogleDataAnalyticsCertificate在完成我的谷歌数据分析专业证书2个月~60天后,我不得不说这是一段地狱般的旅程,......
  • 记录goland编辑器项目可运行但是代码爆红的解决办法
    问题描述goget-u项目之后飘红还以为是版本不兼容,虽然对功能不影响,但是看着一片红很闹心啊,特此记录一下解决办法,以便下次使用。解决办法步骤一:点击工具栏File,找到In......
  • mongodb第三篇:聚合操作
    先认识几个关键字aggregategroupreducemerge 1、根据description字段进行分组,只返回分组字段值db.$collectionName.aggregate({"$group":{"_id":"$description"}})......
  • OpenSergo & CloudWeGo 共同保障微服务运行时流量稳定性
    简介: 流控降级与容错是微服务流量治理中的重要的一环,同时MSE还提供更广范围、更多场景的微服务治理能力,包括全链路灰度、无损上下线、微服务数据库治理、日志治理等一系......
  • 基于systemback的ROS系统镜像备份和安装方案
    ROS系统安装配置复杂,一台机器安装完成之后,如何快速在其他机器上拷贝安装,是一个重要问题。这里给出一个基于systemback的ROS备份安装方案。InstallSystembackonUbuntu1......
  • 万节点规模云服务的 SRE 能力建设
    简介: 随着越来越多企业以容器作为系统底座,那么阿里云的云服务又是如何进行SRE规划呢?下文将由资深SRE工程师拆解2万节点规模云服务背后的SRE能力建设,立即点击观看!......
  • mysql8.0绿色版安装
    下载软件直达官网下载Community版:https://dev.mysql.com/downloads/mysql/然后拉倒下方点击对应版本位数下载2.安装下载完压缩包之后就解压,2.1在程序安装目录创建my.......
  • 企业级微服务快速开发框架介绍
    微服务快速开发框是什么?针对这个问题,今天就给大家做一个详细介绍。在科技不断发展的当下,很多企业已经倾向于使用企业级微服务快速开发框架来提升办公效率了。这是一种将传......