正如Nick提到的,Supervisord是一个很好的选择,根据我的经验也很有效。
尼克提到了分叉的问题- 分叉本身可以很好地实现AFAICT。问题不是派生而是放弃特权。由于Go运行时启动启动goroutine进行多路复用的线程池的方式(当GOMAXPROX> 1时),setuid系统调用不是删除权限的可靠方法。
相反,您应该以非特权用户身份运行程序,并使用setcap实用程序向其授予所需的权限。
例如,要允许绑定到低端口号(例如80),运行将需要在可执行文件上运行一次setcap: sudo setcap 'cap_net_bind_service=+ep' /opt/yourGoBinary
您可能需要安装setcap: sudo aptitude install libcap2-bin