如何在Ubuntu中启动Go程序作为守护进程?
在Ubuntu中启动Go程序作为守护进程的正确方法是什么?然后我将用Monit监视它。我是不是应该这样做:如何在Ubuntu中启动Go程序作为守护进程?,go,Go,在Ubuntu中启动Go程序作为守护进程的正确方法是什么?然后我将用Monit监视它。我是不是应该这样做: go run myapp.go & 是否有一些特定的Go问题需要考虑?有一个关于Go程序中daemonize功能的错误报告: 但是,如果您所追求的只是脱离流程,我看到建议您执行以下操作之一: nohup go run myapp.go 或 您也可以使用进程管理器,比如编写init.d,启动,或者使用类似的东西,这是我个人非常喜欢的。您应该为您的程序构建一个可执行文件(go bu
go run myapp.go &
是否有一些特定的Go问题需要考虑?有一个关于Go程序中daemonize功能的错误报告: 但是,如果您所追求的只是脱离流程,我看到建议您执行以下操作之一:
nohup go run myapp.go
或
您也可以使用进程管理器,比如编写
init.d
,启动
,或者使用类似的东西,这是我个人非常喜欢的。您应该为您的程序构建一个可执行文件(go build
),然后为您编写一个脚本,它将作为守护进程运行您的程序,或者使用外部工具,如。我更喜欢后一种解决方案,因为它不依赖于依赖于系统的暴发户。使用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服务,它在那里做同样的事情。谢谢。你介意分享你的C#代码吗,Nate?还有一个替代方案,专门为Go程序构建。如果不迫切需要每次重新编译你的应用程序,你应该构建一次,并像使用其他编译语言一样运行它。见方丈的回答
daemonize -p /var/run/myapp.pid -l /var/lock/subsys/myapp -u nobody /path/to/myapp.exe