Golang服务器如何在后台运行的问题
Golang服务器如何在后台运行的问题 我正在使用mux和godaemon,但遇到一个小问题…… 这是我的项目:https://github.com/dimensi0n/flume
今天早上我更新到了godaemon,但当我在后台运行服务器时,我在localhost:8080/auth/all上执行curl请求,服务器似乎没有运行……
但由于godaemon的原因,我无法使用-t标志……我不知道为什么……
对此也有 Makefile 的魔法实现 😊
是的,但问题是:“我必须为多个操作系统编译它,这将花费我永恒的时间来完成…”
我在Ubuntu 18.04系统上…执行了go build命令,然后运行了./flume
问题已经解决了,我改用Docker后现在它能在后台运行,而且部署起来也更方便了 😜
跨平台编译 Go 代码非常简单,而且与初次编译代码的速度一样快。如果你认为编译 Go 代码需要很长时间,那说明你还不够耐心 😊
根据godaemon的README说明,您需要提供-d=true标志。
// 示例代码
func main() {
daemon := godaemon.New()
daemon.Run()
}
你是如何启动你的应用程序的?你在哪个操作系统上运行?
Linux 通常在父进程终止时会杀死子进程。这正是守护进程化所做的:将你的程序作为子进程启动,然后自身退出。
需要提供引用来源。你为何会这样说?我个人更倾向于使用 Docker 来部署应用,而不是去折腾 systemd。这样做还能避免因运行服务而污染文件系统,从而防止服务仅因副作用才能运行的情况发生。
在Docker镜像上运行程序有很多理由,同样也有很多不这么做的理由。无论如何,我同意Norbert的观点:通过隔离无法运行的程序来解决某些潜在问题,这根本算不上修复,而是将其掩盖起来,真正的问题可能会在以后反噬你。
在大多数情况下,Docker并非正确的解决方案。我确信编写合适的systemd单元或初始化脚本(取决于您使用的初始化系统)通常是解决此问题更清晰、更好的方案。此外,为目标系统将其封装在适当的软件包中通常比使用Docker服务要好得多。
只有当您想要使用Kubernetes、集群部署或其他类型的云服务进行部署时,Docker才真正有意义。
没有可引用的来源,这只是个人经验。Docker会破坏包管理器的依赖关系。
当你移除Docker时,你的服务就会停止工作,而apt或yum不会发出警告。
它仅仅为了运行一个10MB的可执行文件,就拉取了整整一个操作系统(100MB或更多,至少许多编写糟糕的Docker镜像就是这种情况),其中包含大量不需要的东西,而这个可执行文件在本机运行效果同样良好。
最后但同样重要的是,Docker中存在一些问题,使得客户机能够更改主机中的某些内容,而这通常需要root权限。
这确实如此。从系统管理员的角度来看,如果您的软件不在可用仓库中,我们就不会部署它。当然有时我们不得不这样做,但最令人恼火的就是那些期望具备互联网访问权限和/或使用随产品打包的特定自定义版本的软件。
“但在我的笔记本上运行得好好的” 某开发者 2018
最糟糕的情况是,开发者依赖的实际上是项目所用技术的每日构建版本,并期望我们在生产环境中也使用这些版本。这根本不可能实现 😛
在生产环境中,您希望所有东西都是可复现的,而这种方式完全不符合要求。Docker也不是解决方案。它只是将您的应用程序放在一个我无法深入了解的小容器中,还需要您/我们在其中添加监控平台等组件。而且为什么要放在容器里?我只会对那些完全无状态且需要分布式运行的东西使用容器。如果容器只是"永久"运行,那我宁愿完全跳过Docker,直接在机器上设置。


