gpt4 book ai didi

linux - 我应该如何在后台运行我的 Golang 进程?

转载 作者:IT老高 更新时间:2023-10-28 13:04:56 25 4
gpt4 key购买 nike

这个问题与编程无关,但对程序员来说肯定很重要。

我写了一个简单的 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com