gpt4 book ai didi

go - 在 Go 中启动后进行守护进程

转载 作者:数据小太阳 更新时间:2023-10-29 03:10:25 24 4
gpt4 key购买 nike

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

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

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

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

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

最佳答案

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

所以程序只检查密码。实际的守护进程是 webserver,它仅在密码 checkout 时被调用。

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
}

我这里使用的守护程序是从这里拿来的

https://github.com/sevlyar/go-daemon/blob/master/examples/cmd/gd-simple/simple.go

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

关于go - 在 Go 中启动后进行守护进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52914247/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com