这个问题与编程无关,但对程序员来说肯定很重要。
我写了一个简单的 smtp 服务器,当我从控制台运行它时一切都很好,除了它阻塞了命令行。
我知道我可以通过
nohup ... &
或通过 screen/tmux 等
但问题是,我应该如何实现它在后台运行的程序,并且系统管理员会很高兴设置和管理进程?
一些比我更有经验的人,在 golang-nuts ,写道,他们不使用 fork 等,而是使用来自 monit 等形式的一些“包装器”。
目标平台是基于 Debian 的,盒子上的所有其他东西都是基于 init.d 的。
该主题的任何好资源或编写良好的示例项目的来源?
最佳答案
正如尼克提到的 Supervisord是一个很好的选择,在我的经验中也很有效。
Nick 提到了 fork 本身的问题 AFAICT。问题不是 fork ,而是放弃特权。由于 Go 运行时启动多路复用 goroutine 的线程池的方式(当 GOMAXPROX > 1 时),setuid 系统调用 is not a reliable way to drop permissions .
相反,您应该以非特权用户身份运行程序并使用 setcap实用程序来授予它所需的权限。
例如,要允许绑定(bind)到低端口号(如 80)运行,需要在可执行文件上运行一次 setcap:sudo setcap 'cap_net_bind_service=+ep'/opt/yourGoBinary
您可能需要安装 setcap:sudo aptitude install libcap2-bin
关于linux - 我应该如何在后台运行我的 Golang 进程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14537045/