問題タブ [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.

0 投票する
1 に答える
237 参照

erlang - erlangのスーパーバイザーによって再起動されたプロセスの最後のサイクルであることをどのように知ることができますか?

子供がいるsimple_one_for_one上司がいgen_fsmます。各子gen_fsmが最後に終了したときにのみメッセージを送信するようにします。最後のサイクルがいつなのかを知る方法はありますか?

これが私の上司です:

これPidは、スーパーバイザーを開始し、子プロセスを開始する命令を出すプロセスの Pid です。

私のポイントは、プロセスがいずれかの状態で失敗した場合、スーパーバイザーによって最後に再起動された場合にのみメッセージを送信する必要があるということです (再起動戦略に従って)。

失敗した場合gen_fsm、同じ状態データで同じ状態から再起動しますか? そうでない場合、どうすればそれを発生させることができますか?

0 投票する
1 に答える
1183 参照

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

ありがとう

0 投票する
1 に答える
945 参照

elixir - Elixir アプリで複数のリポジトリを構成する

Ectoを使用して、Elixir アプリで 2 つのリポジトリを構成しようとしています。
one_for_one 戦略で両方が独立して監視されるように構成するのに助けが必要です。私はこれが正しいと仮定し、それらを使用するプロセスが再起動することを意味します

レポAとレポB

mix.exs セットアップ:

MyApp_app.ex

以下のスニペット:

次の結果が得られた場合、 IDを正しくmix run定義する方法がわかりません。

0 投票する
2 に答える
61 参照

erlang - スーパーバイザーが複数の子を作成するときの問題

スーパーバイザーがいます。gen_server である子から child_specs を取得します。私は最初に単一のスーパーバイザーと子の関係についてこれを書きました。後で私はそのスーパーバイザーに多くの子供を育ててもらいたいと思いました。しかし、私はいくつかの ets テーブルを子 gen_server の状態として持っています。したがって、スーパーバイザーが 2 番目の子を作成しようとすると、次のような例外がスローされます。

ets は共有されているため、スーパーバイザーが 2 番目の子の init 関数に移動すると、すでに ets テーブルが表示されているため、例外が発生しますが、回避方法がわかりません。ただし、推測にすぎません。

これは、子の gen_server から子の仕様を取得する方法です

gen_server の init() 関数は

私はerlangの完全な初心者なので、苦労しています。

ありがとうございました !

0 投票する
1 に答える
418 参照

erlang - スーパーバイザーの開始後に動的な simple_one_for_one ワーカーを開始する

システム上の各ユーザーに対して定期的にタスクを実行するSupervisor多くのワーカーを監督する名前があります。simple_one_for_one

アプリが初めて起動したときにユーザーごとに 1 つのワーカーを起動し、後で再起動した場合に、なんらかの理由でSupervisor同じことをアプリに実行させたいと考えています。Supervisor

現時点では、Applicationstart(type, args)コールバックですべての子を動的に開始しますが、Supervisorを再起動すると、すべての子プロセスが開始されるわけではありません。

すべての動的な子ワーカーが、開始/再起動の直後にSupervisorいつでも開始されるようにするにはどうすればよいですか?

(私のアプリは Elixir を使用していますが、Erlang にも同じ原則が適用されます。)

0 投票する
1 に答える
663 参照

elixir - コードを変更すると、Elixir のノード間関数呼び出しが失敗する

次のようにノード間関数呼び出し (rpc) をテストしていました。

次にdbserver、ノードを実行し、 を呼び出しTask.Supervisor.start_link(name: DBServer.DistSupervisor)dbserverrcp を受信し、別のノードで上記のコードを実行します。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 にアップロードされています。

前もって感謝します!

0 投票する
1 に答える
347 参照

elixir - ハートビートを定期的に報告する監視対象プロセスの生成

HTTP リクエストを 5 秒ごとにポストして、ハートビートをサーバーに報告するプロセスを生成しようとしています。私が持っているコードは次のとおりです。

ただし、アプリを起動しようとすると、次のエラーで終了します。

必要なのは、監視ツリーの一部として実行され、指定された間隔で要求を送信するプロセスだけです。メッセージ自体を受信できる必要はありません。特定の実装についてはあまり気にしません。

このプロセスの開始を妨げているここで私が間違ったことを誰かが提案できますか?これを達成するためのより良い方法があるかもしれませんか?

0 投票する
1 に答える
1031 参照

task - エラー時に自動的に再起動する Elixir のスーパーバイザーを使用してアプリを起動する

Elixir でアプリを実行できますが、エラーが発生した場合、すべてが存在します。この場合、アプリを再起動したいだけです。スーパーバイザーを使用していますが、機能しているかどうかさえわかりません。以下は私のコードです:-

mix.exs:-

service_monitor.ex

registry.ex

今、私はコマンドを使用してアプリを実行しています:-

メインコードでエラーが発生するまで、すべて正常に動作します。アプリケーションが存在し、再起動しません。私が受け取るエラーは次のとおりです:-

どこが間違っているのか、親切に助けてください。私の要件は、エラーが発生するとすぐにアプリが自動的に再起動することです。