在文件上重启golang服务器的最佳方法是

时间:2017-02-23 21:47:24

标签: linux go vagrant

我编写的API代码存在于我的$ GOPATH中,但主文件位于系统的其他位置。我试图让我的主文件退出,并在保存某些文件时再次启动。我最接近的是使用findentr的组合:

find $GOPATH/github.com/example/example -path $GOPATH/example/example/vendor -prune -o -name '*.go' -print | entr -r go run /vagrant/script/api/main.go

但由于某种原因,entr无法在再次启动服务之前关闭服务,从而导致错误消息:

ListenAndServe: listen tcp 127.0.0.1:1456: bind: address already in use

对任何允许实时重新加载go服务器的解决方案开放,但需要的配置/设置越少越好,因为我想在多个项目中重用该解决方案。

不确定这是一个问题,但我还应注意,我保存在主机上时,我使用vagrant-fsnotify触摸我的Vagrant来宾计算机中的已更改文件。

1 个答案:

答案 0 :(得分:0)

根据评论,您使用的是entr的旧版本,只会导致go run进程被杀,而您的Go程序仍在运行。运行3.1或更新版本的entr也会将终止信号发送到Go可执行文件,这可以解决问题。

如果可能的话,将entr升级到当前版本(3.6)或至少3.1+。如果这是不可能的,一个解决方案是编写一个包装程序来处理终止信号。该程序将运行go run并观察终止信号。收到该信号后,你的包装器会同时杀死go run和你的Go程序。