2016-04-22 8 views
4

simple_one_for_oneというワーカーを監視する名前がSupervisorで、システム上の各ユーザーに一定の間隔でタスクを実行します。スーパーバイザが起動した後の動的なsimple_one_for_oneワーカーの開始

Supervisorが初めて起動したときに、各ユーザーに1人のワーカーを起動させて、何らかの理由でSupervisorが後で再開した場合、同じようにアプリを実行します。

Applicationのコールはstart(type, args)コールバックですべて動的に起動しますが、Supervisorが再起動された場合、すべての子プロセスが開始されません。

いつでもSupervisorが起動/再起動した直後に、すべてのダイナミックチャイルドワーカーが起動するようにするにはどうすればよいですか?かなりうまく機能し、私はこれをやった

(私のアプリはエリクサーであるが、同じ原理がアーランに適用されます。)

答えて

6

一つの方法は、別のスーパーバイザーと「再起動労働者」を使用することです。あなたのスーパーバイザーは新しいものの子です。再始動する作業員の兄弟です。新しいスーパーバイザはone_for_allまたはrest_for_oneを使用するため、スーパーバイザが停止した場合、再起動ワーカはまたが再起動されます。

再起動ワーカーを再起動すると、動的ワーカーが開始されます。

+0

このアプローチはうまくいきました。 – tomtaylor

+0

これはまさに私が欲しいものです:-)。私は "one_for_all"の代わりに "rest_for_one"をいつ欲しいのかについての洞察はありますか? – tomwilson

関連する問題