2012-04-08 103 views
34

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

go run myapp.go & 

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

+0

如果没有迫切需要重新编译您的应用程序,那么您应该每构建一次应用程序并像其他编译语言一样运行应用程序。请看住持的答案 – Bort 2012-04-09 09:28:41

回答

33

你应该建立一个可执行的程序(go build),然后或者编写脚本,针对upstart,它会运行您的程序作为守护你,或使用外部工具,像daemonize。我更喜欢后一种解决方案,因为它不依赖于依赖系统的新贵。随着守护进程你就可以开始你的应用程序一样

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

这会给你与守护进程做一切必要的准备守护良好的表现UNIX守护进程。

+3

这就是我们在工作中所做的。 Goroutines在进程中使守护进程复杂化。在RHEL上,我们使用标准的Sys V启动/停止/重新启动脚本。在其他地方,你想使用目标操作系统使用的任何东西......暴发户等。在Windows上,我们有一个用C#编写的小型Windows服务,它在那里执行相同的操作。 – Nate 2012-04-09 04:52:06

+1

谢谢。你介意分享你的C#代码,Nate吗? – Atmocreations 2016-02-07 12:41:27

+0

另外还有一个专门为Go程序构建的https://github.com/fiorix/go-daemon。 – fiorix 2016-04-15 14:13:39

6

有关于从Go程序中,以守护进程的能力的错误报告:http://code.google.com/p/go/issues/detail?id=227要么执行下列操作之一

但如果你以后有什么是刚刚从进程分离我见过的建议:

nohup go run myapp.go 

go run myapp.go & disown 

您还可以使用进程管理器,就像写一个init.dStartup,或使用类似Supervisor,我个人非常喜欢。

相关问题