如何使用golang控制后台任务

目前有一个需求就是使用golang运行一个web服务。
如何通过浏览器访问来启动或者关闭一个任务进程?
这个任务将会一直运行下去。

目前我采用的方法,不知道是否有更好的方法来进行控制

//匿名控制器。允许任意函数处理
package controller

import (
    "github.com/gin-gonic/gin"
    "fmt"
    "time"
    "runtime"
)

var Runing = false
var Exit = false

func Run() {
    fmt.Println("Runing",Runing)
    if Runing {
        runtime.Goexit()
    }
    Runing = true
    fmt.Println("Runing",Runing)
    fmt.Println("Goid()",Goid())
    num := 0
    for true {
        fmt.Println("num",num)
        num++
        if Exit {
            runtime.Goexit()
        }
        time.Sleep(1 * time.Second)
    }
}
//地址访问/api/test?open=true进行开启关闭
func Test(c *gin.Context){
    open := c.Query("open")
    if open == "true" {
        Exit = false
        go Run()
    } else {
        Exit = true
        Runing = false
    }
    c.JSON(200,open)
}

阅读 4.5k
2 个回答

你现在用 go 跑了一个 web 服务,那就用浏览器发请求啊,比如 /run/abc,go web server 就启动 abc 这个程序;请求 /stop/abc 就关闭 abc。web 服务那边就 fork 子进程来运行 abc,或者 kill 掉 abc。如果某个程序可以有多个,你还可以传递 pid

web端通过http请求调用服务端,在服务端启动服务即可,停止服务也是一样的

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题