問題タブ [erlang-supervisor]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
erlang - erlangのスーパーバイザーによって再起動されたプロセスの最後のサイクルであることをどのように知ることができますか?
子供がいるsimple_one_for_one
上司がいgen_fsm
ます。各子gen_fsm
が最後に終了したときにのみメッセージを送信するようにします。最後のサイクルがいつなのかを知る方法はありますか?
これが私の上司です:
これPid
は、スーパーバイザーを開始し、子プロセスを開始する命令を出すプロセスの Pid です。
私のポイントは、プロセスがいずれかの状態で失敗した場合、スーパーバイザーによって最後に再起動された場合にのみメッセージを送信する必要があるということです (再起動戦略に従って)。
失敗した場合gen_fsm
、同じ状態データで同じ状態から再起動しますか? そうでない場合、どうすればそれを発生させることができますか?
elixir - Elixir の動的スーパーバイザー仕様
インスタンス GameServer (GenServer) の子を動的に作成するために使用する GameSupervisor 監視モジュールを作成しました。GameSupervisor.start 関数が呼び出されたときに GameServer の start_link メソッドが呼び出されていることがわかりますが、pid は維持されません。再起動戦略が一時的に設定されている場合、iex の Process.alive?(pid) は常に false を返します。再起動を一時的または永続的に設定すると、その pid で GenServer.cast を呼び出すと、GameServer.start_link が再度呼び出されます。
start_child を呼び出しても、pid が監視ツリーに自動的に追加されず、存続しませんか?
GameSupervisor.ex
GameServer.ex
ありがとう
elixir - Elixir アプリで複数のリポジトリを構成する
Ectoを使用して、Elixir アプリで 2 つのリポジトリを構成しようとしています。
one_for_one 戦略で両方が独立して監視されるように構成するのに助けが必要です。私はこれが正しいと仮定し、それらを使用するプロセスが再起動することを意味します
レポAとレポB
mix.exs セットアップ:
MyApp_app.ex
以下のスニペット:
次の結果が得られた場合、 IDを正しくmix run
定義する方法がわかりません。
erlang - スーパーバイザーが複数の子を作成するときの問題
スーパーバイザーがいます。gen_server である子から child_specs を取得します。私は最初に単一のスーパーバイザーと子の関係についてこれを書きました。後で私はそのスーパーバイザーに多くの子供を育ててもらいたいと思いました。しかし、私はいくつかの ets テーブルを子 gen_server の状態として持っています。したがって、スーパーバイザーが 2 番目の子を作成しようとすると、次のような例外がスローされます。
ets は共有されているため、スーパーバイザーが 2 番目の子の init 関数に移動すると、すでに ets テーブルが表示されているため、例外が発生しますが、回避方法がわかりません。ただし、推測にすぎません。
これは、子の gen_server から子の仕様を取得する方法です
gen_server の init() 関数は
私はerlangの完全な初心者なので、苦労しています。
ありがとうございました !
erlang - スーパーバイザーの開始後に動的な simple_one_for_one ワーカーを開始する
システム上の各ユーザーに対して定期的にタスクを実行するSupervisor
多くのワーカーを監督する名前があります。simple_one_for_one
アプリが初めて起動したときにユーザーごとに 1 つのワーカーを起動し、後で再起動した場合に、なんらかの理由でSupervisor
同じことをアプリに実行させたいと考えています。Supervisor
現時点では、Application
のstart(type, args)
コールバックですべての子を動的に開始しますが、Supervisor
を再起動すると、すべての子プロセスが開始されるわけではありません。
すべての動的な子ワーカーが、開始/再起動の直後にSupervisor
いつでも開始されるようにするにはどうすればよいですか?
(私のアプリは Elixir を使用していますが、Erlang にも同じ原則が適用されます。)
elixir - コードを変更すると、Elixir のノード間関数呼び出しが失敗する
次のようにノード間関数呼び出し (rpc) をテストしていました。
次にdbserver
、ノードを実行し、 を呼び出しTask.Supervisor.start_link(name: DBServer.DistSupervisor)
てdbserver
rcp を受信し、別のノードで上記のコードを実行します。dbclient
以下のようにrpc を正しく実行できます。
dbserver
dbclient
ただし、コードを"test"
から"test test
" に変更した後、dbclient ノードが機能しません。
ここにエラーメッセージがあります
dbserver
dbclient
さらに、手動で再起動した後も機能します。dbserver
興味深いことに、それはiex
どんなコードでも機能します。
私の質問は、
- ノード内の関数を別のノードから呼び出すのは間違った方法ですか?
- ノード間関数呼び出しを使用する場合、クライアント コードを変更するたびに呼び出し先ノードを再実行する必要がありますか?
iex
と の間で動作が異なるのはなぜelixir script
ですか?
コードとプロジェクト全体は、https ://github.com/ayamamori/rpc_test/blob/master/lib/rpc_test.ex にアップロードされています。
前もって感謝します!
elixir - ハートビートを定期的に報告する監視対象プロセスの生成
HTTP リクエストを 5 秒ごとにポストして、ハートビートをサーバーに報告するプロセスを生成しようとしています。私が持っているコードは次のとおりです。
ただし、アプリを起動しようとすると、次のエラーで終了します。
必要なのは、監視ツリーの一部として実行され、指定された間隔で要求を送信するプロセスだけです。メッセージ自体を受信できる必要はありません。特定の実装についてはあまり気にしません。
このプロセスの開始を妨げているここで私が間違ったことを誰かが提案できますか?これを達成するためのより良い方法があるかもしれませんか?
task - エラー時に自動的に再起動する Elixir のスーパーバイザーを使用してアプリを起動する
Elixir でアプリを実行できますが、エラーが発生した場合、すべてが存在します。この場合、アプリを再起動したいだけです。スーパーバイザーを使用していますが、機能しているかどうかさえわかりません。以下は私のコードです:-
mix.exs:-
service_monitor.ex
registry.ex
今、私はコマンドを使用してアプリを実行しています:-
メインコードでエラーが発生するまで、すべて正常に動作します。アプリケーションが存在し、再起動しません。私が受け取るエラーは次のとおりです:-
どこが間違っているのか、親切に助けてください。私の要件は、エラーが発生するとすぐにアプリが自動的に再起動することです。