当前位置: > > > > 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 启动后进行守护进程》的内容就介绍到这里了,是不是学起来一目了然!想要了解更多关于的内容请关注公众号!