这个问题与编程无关,但对于程序员来说肯定很重要。
我编写了一个简单的 smtp 服务器,当我从控制台运行它时,一切都很好,除了它阻止了命令行。
我知道我可以通过以下方式运行它
nohup ... &
或通过 screen / tmux 等
但问题是,我应该如何实现它在后台运行的程序,并且系统管理员会很乐意设置它并管理进程?
有些人比我更有经验戈兰坚果 https://groups.google.com/forum/?fromgroups=#!topic/golang-nuts/othxUDO-EoE,写道,他们不使用 fork 等,而是使用 monit 等形式的一些“包装器”。
目标平台是基于 Debian 的,盒子上的所有其他东西都是基于 init.d 的。
对于该主题有什么好的资源或编写良好的示例项目的来源吗?
正如尼克提到的主管 http://supervisord.org/这是一个很好的选择,根据我的经验也很有效。
Nick 提到了分叉的问题——分叉本身工作得很好 AFAICT。问题不在于分叉,而在于放弃特权。由于 Go 运行时启动线程池的方式(当 GOMAXPROX > 1 时),setuid 系统调用不是删除权限的可靠方法 https://groups.google.com/forum/?fromgroups=#!topic/golang-nuts/BZWXqv3YSg4.
相反,您应该以非特权用户身份运行您的程序并使用setcap http://linux.die.net/man/8/setcap实用程序授予它所需的权限。
例如,要允许绑定到低端口号(如 80),需要在可执行文件上运行 setcap 一次:sudo setcap 'cap_net_bind_service=+ep' /opt/yourGoBinary
您可能需要安装 setcap:sudo aptitude install libcap2-bin
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)