程序开发 · 2025年7月1日

Go 启动后进行守护进程

当前位置: > > > > Go 启动后进行守护进程

来源:stackoverflow
2024-04-20 17:00:39
0浏览
收藏

一分耕耘,一分收获!既然打开了这篇文章《Go 启动后进行守护进程》,就坚持看下去吧!文中内容包含等等知识点…希望你能在阅读本文后,能真真实实学到知识或者帮你解决心中的疑惑,也欢迎大佬或者新人朋友们多留言评论,多给建议!谢谢!

问题内容

我有一个需要作为守护进程运行的系统,该系统是用 go 开发的。通常我可以通过像 systemd 之类的东西甚至只是像“./project &”这样简单的东西来管理它,但是这个特定的项目需要在它成为守护进程之前获得一些输入 – 它需要一个密码待输入。

此密码不能作为命令行参数提供、放置在配置文件中、硬编码在源代码中等。它必须由知道系统启动时密码的人手动提供。

启动时,项目需要收集密码,验证一切是否正确,并且只有提供正确的密码(通过尝试解密证书进行验证)才能真正开始作为守护进程运行。

有什么方法可以让项目启动,接受来自标准输入的输入,执行所需的任何验证等,然后才成为守护进程(与标准输入分离等)?

目前,我可以通过启动它来模拟所需的行为,并在输入密码后使用“ctrl+z”暂停它并使用 bg 将进程推送到后台。当然,必须有一种方法可以从流程本身内部做到这一点……

解决方案

这是一个可以实现我认为您的意思的程序。

所以程序只检查密码。实际的守护进程是 webserver,仅当密码签出时才会调用它。

package main

import (
    "golang.org/x/crypto/ssh/terminal"
    "os/exec"
)


func main() {
    pwd, err := terminal.ReadPassword(1)
    if err != nil {
        panic(err)
    }

    if string(pwd) == "test" {
        c := exec.Command("./webserver")
        c.Run()
    }
    return
}

我在这里使用的守护程序是从这里获取的

不可能同时运行单个程序作为等待输入和守护程序。

今天关于《Go 启动后进行守护进程》的内容就介绍到这里了,是不是学起来一目了然!想要了解更多关于的内容请关注公众号!