【问题标题】:How to start a Go program as a daemon in Ubuntu?如何在 Ubuntu 中启动 Go 程序作为守护进程?
【发布时间】:2012-04-08 23:08:31
【问题描述】:

在 Ubuntu 中启动 Go 程序作为守护进程的正确方法是什么?然后我会用Monit监控它。我是否应该这样做:

go run myapp.go &

我应该考虑哪些特定于 Go 的事情?

【问题讨论】:

  • 如果不需要每次都重新编译您的应用程序,您应该构建一次并像使用其他编译语言一样运行它。见方丈的回答

标签: go


【解决方案1】:

您应该为您的程序 (go build) 构建一个可执行文件,然后为 upstart 编写一个脚本,它将为您运行您的程序作为守护程序,或者使用像 daemonize 这样的外部工具。我更喜欢后一种解决方案,因为它不依赖于依赖系统的新贵。使用 daemonize 你可以像这样启动你的应用程序

daemonize -p /var/run/myapp.pid -l /var/lock/subsys/myapp -u nobody /path/to/myapp.exe

这将为您提供一个行为良好的 unix 守护进程,其中所有必要的守护进程都由 daemonize 完成。

【讨论】:

  • 这就是我们在工作中的做法。 Goroutines 使进程中的守护进程复杂化。在 RHEL 上,我们使用标准 Sys V 启动/停止/重启脚本。在其他地方,您想使用目标操作系统使用的任何东西……upstart 等。在 Windows 上,我们有一个用 C# 编写的小型 Windows 服务,在那里做同样的事情。
  • 谢谢。 Nate,您介意分享您的 C# 代码吗?
  • 还有 github.com/fiorix/go-daemon 作为替代方案,专为 Go 程序构建。
【解决方案2】:

有一个关于从 Go 程序中进行守护进程的错误报告:http://code.google.com/p/go/issues/detail?id=227

但是,如果您所追求的只是脱离流程,我已经看到建议执行以下任一操作:

nohup go run myapp.go

go run myapp.go & disown

您还可以使用流程管理器,例如编写 init.dStartup 或使用 Supervisor 之类的东西,我个人非常喜欢。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-04
    • 1970-01-01
    • 1970-01-01
    • 2012-11-23
    • 1970-01-01
    相关资源
    最近更新 更多