如何在Ubuntu中启动Go程序作为守护进程?

Bla*_*sad 40 go

在Ubuntu中作为守护进程启动Go程序的正确方法是什么?然后我会用Monit监控它.我应该做的事情如下:

go run myapp.go &
Run Code Online (Sandbox Code Playgroud)

是否有特定于Go的东西我应该考虑到?

abb*_*bot 38

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

daemonize -p /var/run/myapp.pid -l /var/lock/subsys/myapp -u nobody /path/to/myapp.exe
Run Code Online (Sandbox Code Playgroud)

这将为您提供一个行为良好的unix守护程序进程,并通过daemonize完成所有必需的守护程序准备.

  • 这就是我们在工作中的表现.Goroutines使守护进程复杂化.在RHEL上,我们使用标准的Sys V启动/停止/重启脚本.在其他地方,你想要使用目标操作系统使用的任何东西......暴发户等.在Windows上,我们有一个用C#编写的小型Windows服务,它在那里做同样的事情. (3认同)

jdi*_*jdi 9

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

但是,如果您所追求的只是从流程中分离出来,我看到建议要么执行以下操作之一:

nohup go run myapp.go
Run Code Online (Sandbox Code Playgroud)

要么

go run myapp.go & disown
Run Code Online (Sandbox Code Playgroud)

您还可以使用进程管理器,就像写一个init.d,Startup或使用类似的主管,我个人很喜欢.