ローカルにgolangアプリを構築してからサーバーにscp
をインストールしました。私はプロセスを停止し、手動で再起動する必要があります。バイナリが更新されたときにプロセスを自動再起動する方法はありますか?Golang:バイナリの更新時にプロセスを自動再起動する方法は?
-1
A
答えて
1
洗練されている必要がありますか?バイナリが変更されると、entr
が実行され、アップデータスクリプトがトリガされます。
例えばこれはdaemontoolsのか、似たようなものを使用してオフプロセスに実装することが一般的に優れているものの
echo 'binary_path' | entr script.sh &
3
、あなたが/欲しい、それはあなたのプログラムの内部で行われる必要がある場合があります。
あなたのプログラム内でそれを行うと、このような接続やファイルなどのプログラムの特性に応じて、それが開いていることがあり注意が必要です、など
は、ここにあなたがほとんどのケースでうまくいくの実装を持っていることを言った:
package main
import (
"log"
"os"
"syscall"
"time"
"github.com/fsnotify/fsnotify"
"github.com/kardianos/osext"
)
func setupWatcher() (chan struct{}, error) {
file, err := osext.Executable()
if err != nil {
return nil, err
}
log.Printf("watching %q\n", file)
w, err := fsnotify.NewWatcher()
if err != nil {
return nil, err
}
done := make(chan struct{})
go func() {
for {
select {
case e := <-w.Events:
log.Printf("watcher received: %+v", e)
err := syscall.Exec(file, os.Args, os.Environ())
if err != nil {
log.Fatal(err)
}
case err := <-w.Errors:
log.Printf("watcher error: %+v", err)
case <-done:
log.Print("watcher shutting down")
return
}
}
}()
err = w.Add(file)
if err != nil {
return nil, err
}
return done, nil
}
func main() {
log.Print("program starting")
watcher, err := setupWatcher()
if err != nil {
// do something sensible
log.Fatal(err)
}
// continue with app startup
time.Sleep(100 * time.Minute) // just for testing
// eventually you may need to end the watcher
close(watcher) // this way you can
}
次に、あなたは
% go build main.go
% ./main
2016/12/29 14:15:06 program starting
2016/12/29 14:15:06 watching "/home/plalloni/tmp/v/main"
そして、ここで(他の端末で)それはあなたが実行した後に生成される出力いくつかの連続は、「ビルド舞を行ってくださいn.go "(実行中のバイナリを更新します)。
2016/12/29 14:15:32 watcher received: "/home/plalloni/tmp/v/main": CHMOD
2016/12/29 14:15:32 program starting
2016/12/29 14:15:32 watching "/home/plalloni/tmp/v/main"
2016/12/29 14:15:38 watcher received: "/home/plalloni/tmp/v/main": CHMOD
2016/12/29 14:15:38 program starting
2016/12/29 14:15:38 watching "/home/plalloni/tmp/v/main"
希望します。
1
このケースについては解決方法があります。
も参照してください。 https://github.com/narita-takeru/cmdrevive
例
cmdrevive ./htmls/ ".html$" (application) (arguments)
ので、この場合に適用。
cmdrevive "/(app path)" "(app filename)" (app full path) (arguments)
(アプリパス)ディレクトリに変更(アプリのファイル名)場合、(引数)と(アプリフルパス)を再起動します。
これはどうですか。
関連する問題
- 1. synologyの再起動時にドッカーを自動起動する方法
- 2. 自己更新Pythonスクリプトの再起動
- 3. システム再起動時に自動的にチャットサーバーアプリケーションを再起動する
- 4. を再起動したIoTデバイス&自動更新をオフにし
- 5. ノードサーバーを自動的に再起動する方法は?
- 6. ファイル保存時にgolangサーバーを再起動する最善の方法
- 7. Ubuntu - クラッシュしたプロセスやフリーズしたプロセスを自動的に再起動する方法は?
- 8. クラッシュ時にjarファイルを自動的に再起動する方法
- 9. Android 2.2:起動時に自動的に起動する方法と、別のアプリを起動させる方法
- 10. emacs/spacemacsの起動時にシェルバッファを自動的に起動する方法
- 11. データ挿入時に自動更新をトリガーする方法は?
- 12. Windowsサービスが自動ではない再起動時に起動する
- 13. ノードアプリケーションを自動再起動する方法は?
- 14. Wampサーバーに接続されたC++プロセスの自動再起動
- 15. ノードサーバーを自動的に再起動する方法
- 16. 構成の変更時に.Netアプリケーションが自動的に再起動する
- 17. デバイスの再起動時にMIDletを自動的に起動しますか?
- 18. Windows 7起動時にプログラムを起動する(自動起動)
- 19. ListAdapterを自動更新または自動更新する方法は?
- 20. Docker on Mac:マシンの再起動後にデーモンプロセスを自動再起動する方法は?
- 21. Pythonプロセスを監視して異常終了時に再起動する方法
- 22. リソースの更新時にIntelliJがサーバーを再起動します
- 23. プログラムを再起動する方法は? (Linuxプロセス)
- 24. 起動時に画面に自動的にナビゲートする方法
- 25. いずれかのプロセスを自動的に終了するときに再起動する方法
- 26. 起動時に再起動アプリケーションを起動する
- 27. 更新後にjComboBoxデータを自動更新する方法は?
- 28. クラッシュ時に自動的にアプリケーションを再起動しますか?
- 29. コンテナ内のプロセスを再起動する方法/元のrestart.pyを使用してPhpStormを再起動する
- 30. Asp.Netウェブサイトを自動的に起動するWindows起動時に自動的に
これは助けになるかもしれません - https://github.com/jpillora/overseer – Nadh
この質問はGoとは関係ありません。 – seh
scpを実行している場合は、それを '' 'scp binary server:/ bin && ssh server restart-server.sh'''に変更してください。 – placeybordeaux