2017-02-23 4 views
2

私の$ GOPATHに存在するがメインファイルはシステム上の別の場所にあるAPIコードが書かれています。私は、メインファイルを終了し、特定のファイルが保存されるたびに開始し、再度取得しようとしています。私が得ている最も近いfindentrの組み合わせを使用することです:ファイル保存時にgolangサーバーを再起動する最善の方法

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を使用しています。

+0

私の最初の疑惑は、 'entr'が' go run'プロセスだけを強制終了させて​​、あなたのGoプログラムをまだ実行しているということです。しかし、 'entr'ドキュメンテーションは、3.1の時点で、すべての子プロセスがシグナルを受け取ることを保証し、現在のバージョンは3.6です。あなたのコンパイルされたGoプログラムは 'go run'の子プロセスでなければなりません。もしあなたが最近のバージョンの' entr'を使っているのであれば、おそらくそうではないでしょう。 (あなたは最新の 'entr'を使っていますか?) –

+0

@DarshanRivkaWhittle今日はapt-getをインストールしてインストールしました。私はプログラムには--versionオプションがないので、私が使っているバージョンを知ることができないと思います。 – tanman

+0

Ubuntu 14(これは私が使用している)のように見えるのは、バージョン2.5だけです。手動で最新のバージョンをインストールして問題が解決されるかどうか確認します。 – tanman

答えて

0

コメントによれば、あなたのGoプログラムを実行したまま、go runプロセスのみを終了させる古いバージョンのentrを使用しています。 entrのバージョン3.1以降を実行すると、Go実行可能ファイルに終了シグナルが送信され、問題が解決されます。

可能であれば、entrを現在のバージョン(3.6)または少なくとも3.1+にアップグレードしてください。これが不可能な場合は、終了信号を処理するラッパープログラムを作成することです。そのプログラムはgo runを実行し、終了信号を監視します。その信号を受信すると、ラッパーはgo runとGoプログラムの両方を強制終了します。

+1

うん、新しいバージョンで問題が解決しました。ありがとう – tanman

関連する問題