前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >go编写开机自启动服务-service

go编写开机自启动服务-service

原创
作者头像
IT工作者
发布2022-08-10 10:30:59
1.8K0
发布2022-08-10 10:30:59
举报
文章被收录于专栏:程序技术知识程序技术知识
代码语言:javascript
复制
/*
 * @Author: your name
 * @LastEditors: Please set LastEditors
 * @Description: In User Settings Edit
 * @FilePath: /test/main.go
 */
package main

import (
    "fmt"
    "os"
    "runtime"

    "github.com/kardianos/service"
)

var logger service.Logge

func main() {
    NCPU := runtime.NumCPU()
    runtime.GOMAXPROCS(NCPU)

    serConfig := &service.Config{
        Name:        "hhhh",
        DisplayName: "test2",
        Description: "test 开机自启动",
    }

    pro := &Program{}
    s, err := service.New(pro, serConfig)
    if err != nil {
        fmt.Println(err, "service.New() err")
    }

    if len(os.Args) > 1 {
        if os.Args[1] == "install" {
            err = s.Install()
            if err != nil {
                fmt.Println("install err", err)
            } else {
                fmt.Println("install success")
            }
            return
        }

        if os.Args[1] == "remove" {
            err = s.Uninstall()
            if err != nil {
                fmt.Println("Uninstall err", err)
            } else {
                fmt.Println("Uninstall success")
            }
            return
        }
    }

    err = s.Run() // 运行服务
    if err != nil {
        fmt.Println("s.Run err", err)
    }
}

type Program struct{}

func (p *Program) Start(s service.Service) error {
    fmt.Println("server start")
    go p.run()
    return nil
}

func (p *Program) run() {
    fmt.Println("开机自启动服务 - run")
}

func (p *Program) Stop(s service.Service) error {
    fmt.Println("server stop")
    return nil
}

代码语言:javascript
复制
sudo go run main.go install  # 安装服务,mac需要权限,所以加sudo
cd /Library/LaunchDaemons
ls # 即可看到创建的服务hhhh.plist
sudo go run main.go remove # 卸载服务

代码语言:javascript
复制
# 如果出现timeout
go: github.com/kardianos/service@v1.1.0: Get "https://proxy.golang.org/github.com/kardianos/service/@v/v1.1.0.mod": dial tcp 1.1.1.1:443: i/o timeout
# 则执行下面的命令
go env -w GOPROXY=https://goproxy.cn

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档