当前位置: 首页 > 面试题库 >

我应该如何在后台运行Golang进程?

阎建中
2023-03-14
问题内容

这个问题与编程没有严格关系,但是对于程序员来说肯定是重要的。

我写了一个简单的smtp服务器,当我从控制台运行它时,一切都很好,只是它阻止了命令行。

我知道我可以通过运行它

nohup ... &

或通过屏幕/ tmux等

但是问题是,我应该如何实现我的程序在后台运行,并且系统管理员可以很高兴地设置和管理该程序?

有些人比我有更多的经验,在golang-
nuts上
写道,他们不使用fork等,而是使用monit等形式的“包装器”。

目标平台基于Debian,包装盒上的所有其他内容均基于init.d。

关于该主题的任何良好资源,或编写良好的示例项目的资源?


问题答案:

正如Nick提到的,Supervisord是一个很好的选择,根据我的经验也很有效。

尼克提到了分叉的问题-
分叉本身可以很好地实现AFAICT。问题不是派生而是放弃特权。由于Go运行时启动启动goroutine进行多路复用的线程池的方式(当GOMAXPROX>
1时),setuid系统调用不是删除权限的可靠方法。

相反,您应该以非特权用户身份运行程序,并使用setcap实用程序向其授予所需的权限。

例如,要允许绑定到低端口号(例如80),运行将需要在可执行文件上运行一次setcap: sudo setcap 'cap_net_bind_service=+ep' /opt/yourGoBinary

您可能需要安装setcap: sudo aptitude install libcap2-bin



 类似资料:
  • 问题内容: 我最近完成了 Wiki网站开发教程 (http://golang.org/doc/articles/wiki/)。我玩得很开心,我想用net / http包做更多的实验。 但是,我注意到从控制台运行Wiki时,该Wiki将接管控制台。如果我关闭控制台终端或停止进程,则服务器将停止。 如何使服务器在后台运行?我认为该术语在守护程序中运行。 我正在Ubuntu 12.04上运行它。谢谢你的

  • 问题内容: 我想使用ffmpeg在php中将视频转换为.flv。目前,我正在执行此操作,但是它会挂起浏览器,直到文件上传完毕。我一直在寻找有关如何在后台运行exec()进程的php文档,同时使用返回的PID更新进程。这是我发现的: 我还使用一个技巧来跟踪后台任务是否正在使用返回的PID运行: 我是否想创建一个单独的.php文件,然后从php cli运行以执行以下功能之一?我只需要稍微推动一下即可开

  • 问题内容: 我已经使用selenium2周了。 到目前为止,它确实非常有用。 在开发时,我喜欢弹出浏览器,以便可以看到发生了什么,但是在生产中,我不希望服务器继续打开和关闭Firefox窗口。我浏览了这个论坛,完成了Google搜索等工作,但是找不到在后台运行浏览器的方法。 有人对如何执行此操作有提示吗? 问题答案: 尝试使用PhantomJS,这是一个无头的浏览器Webkit。 HTMLUnit

  • 问题内容: 我正在写一个Java库,实际上是一个Clojure库,但是对于这个问题,重要的是它在JVM上运行。该库需要执行一些JavaScript。我尝试过Nashorn,但遇到了一些局限性,可能难以克服。另外,我想尝试NodeJS。 我希望我的库是独立的,不依赖于独立运行NodeJS的系统,因此需要一种特殊的部署机制将Java和NodeJS工件放置在正确的位置,以便由两个不同的网络服务器接收。但

  • 我想让一些代码在后台持续运行。我不想在服务中这样做。还有其他可能的方法吗? 我曾尝试在我的活动中调用线程类,但我的活动在后台保留了一段时间,然后就停止了。线程类也停止工作。

  • 问题内容: 我的流程中有一个方法,仅当该流程不在后台时才应运行。如何动态测试当前进程是否在后台?谢谢 问题答案: 查看Unix FAQ:进程如何检测它是否在后台运行? 普遍的答案是:您无法确定您是否在后台运行。 但是您可以检查stdin是否为终端: