0

我的 Makefile 中有一个简单的监视目标

watch:
  watchman-make -p '**/*.go' -t run

targetrun启动一个 Web 服务器并绑定到一个端口。文件更改后,run执行,但得到错误。

bind: address already in use

这是因为,之前启动的 Web 服务器并未终止。我看到与此相关的线程很少,但没有给出解决方案。

https://github.com/facebook/watchman/issues/246 https://github.com/facebook/watchman/issues/447

在每次构建之前,守望者是否可以终止服务器并释放端口。

4

1 回答 1

1

该解决方案不能通过 watchman 直接控制,因为它对您的服务器一无所知,因为听起来您在构建结束时将其分叉,但应该非常简单:让您的run目标负责拆除旧的服务器实例。

例如,在您的 Makefile 中:

run: build
      ./stop-running-server
      ./start-server

如何实施stop-running-server取决于您。下面列出了您可以尝试的几种常见技术:

  • pkill杀死名称与您的服务器名称匹配的进程
  • 让您的服务器将其进程 ID 写入文件,然后您可以kill $(cat pidfile)执行stop-running-server
于 2017-12-14T07:39:28.573 回答