【问题标题】:How to Start and Stop a server with command line tool in golang如何在 golang 中使用命令行工具启动和停止服务器
【发布时间】:2020-03-20 12:19:18
【问题描述】:

我有一个 grpc 服务器(golang),我想通过命令行工具启动和停止它,停止服务器后它应该执行一些内务处理任务并退出进程。

  • 我可以通过保持循环等待用户输入来做到这一点。前 -
func main() {
    for {
        var input string
        fmt.Scanln(&input)
        //parse input
        // if 'start' execute - go start()
        // if 'stop' execute - stop() and housekeepingTask() and break
    }
 }

可以有不同的方法。有没有更好的想法或方法可以使用?

我正在寻找类似于 kafka/any db start 和 stop 工作方式的东西。 任何指向现有解决方案或方法的指针都会有所帮助。

【问题讨论】:

  • 服务通常不会从标准输入读取,因为它们通常作为守护进程运行,没有附加 tty 来接收输入。通常,您会使用进程信号发出正常关闭的信号,例如HUP 重新加载配置,TERM 关闭等。
  • 感谢您的回答。我正在努力解决这个问题。任何帮助都会很棒

标签: go unix server


【解决方案1】:

我得到了@Mehran 评论/回答的正确方法之一。不过让我花点时间详细回答一下——

这可以通过进程间通信来解决。我们可以有一个 bash 文件,它将用户信号发送到程序(如果已经运行),并且可以根据它的进程对其进行操作。 (甚至我们可以拥有进程可以读取和操作的标准输入文件)

一些有用的链接 - - https://blog.mbassem.com/2016/05/15/handling-user-defined-signals-in-go/ - Send command to a background process - How to signal an application without killing it in Linux?

我会尝试添加一个有效的 go 程序。

【讨论】:

    猜你喜欢
    • 2021-06-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-13
    • 1970-01-01
    • 1970-01-01
    • 2022-01-10
    相关资源
    最近更新 更多