2017-02-07 4 views
0

Я хочу контролировать задачу с использованием политики повторного перезапуска, так что она перезапускается только в том случае, если она выходит из строя аномально. Однако, когда я тестировал свое приложение, я обнаружил, что он перезапускал его 4 раза, прежде чем супервизор выручил сам. Я упростил код и даже изменил его на: временный, но даже тогда супервизор перезапустил задачу.Elixir supervisor неожиданно перезапускает временного/временного работника

Упрощенный пример:

defmodule FooSup do 
    use Supervisor 

    def start_link() do 
    IO.puts "starting #{__MODULE__}" 
    Supervisor.start_link(__MODULE__, {}) 
    end 

    def init(_)do 
    children = [worker(Task, [fn -> IO.puts("task running") end])] 
    supervise(children, strategy: :one_for_one, restart: :temporary) 
    end 
end 

Когда я начинаю процесс FooSup я получаю следующий результат:

iex(2)> FooSup.start_link() 
starting Elixir.FooSup 
task running 
{:ok, #PID<0.215.0>} 
task running 
task running 
task running 

Кстати, я знаю, что если я хочу динамически контролируется: временные задачи, которые я могу использовать TaskSupervisor, но я хочу, чтобы статически контролировался: переходный действительно.

Использовал Elixir в течение нескольких лет, но не видит, что здесь не так.

+0

Не следует «перезапускать:: временный» вариант «рабочий» не «контролировать»? В соответствии с: https://hexdocs.pm/elixir/Supervisor.html#module-simple-one-for-one –

ответ

2

Я только что проверил на месте, и restart должна быть возможность worker вместо supervise, поэтому он должен выглядеть следующим образом:

defmodule FooSup do 
    use Supervisor 

    def start_link() do 
    IO.puts "starting #{__MODULE__}" 
    Supervisor.start_link(__MODULE__, {}) 
    end 

    def init(_)do 
    children = [worker(Task, [fn -> IO.puts("task running") end], restart: :temporary)] 
    supervise(children, strategy: :one_for_one) 
    end 
end 

Больше можно найти здесь: https://hexdocs.pm/elixir/Supervisor.html#module-simple-one-for-one

удачи !

 Смежные вопросы

  • Нет связанных вопросов^_^