Elixir: Запланированные задания не запускают задачу Mix после первого вызова - PullRequest
0 голосов
/ 24 сентября 2018

Я использую Квант для обработки заданий cron.Параметр следующий:

application.ex

def start
  ...
  children = [ 
    ...
    worker(MyApp.Scheduler, [])
  ]
  opts = [strategy: :one_for_one, name: MyApp.Supervisor]
  Supervisor.start_link(children, opts)
end

config.exs

config :My_app, MyApp.Scheduler,
  jobs: [
    {"*/5 * * * *",   fn -> Mix.Task.run "first_mix_task" end},
    {"*/5 * * * *",   fn -> Mix.Task.run "second_mix_task" end},
    {"*/5 * * * *",   fn -> Mix.Task.run "third_mix_task" end},
    {"*/5 * * * *",   fn -> Mix.Task.run "fourth_mix_task" end}
  ]

Проблема заключается в том, что по какой-то причине задачи Mix запускаются только первымивремя после добавления заданий cron.Позже, хотя я вижу, что в журналах запускаются и заканчиваются кроны (согласно Quantum), задачи Mix никогда не запускаются.

Я не включаю задачи микширования здесь, потому что они отлично работают при первом запуске, а такжекогда вызывается из консоли.Поэтому я думаю, что проблема должна быть в настройках, которые я включаю здесь.Но если у вас есть веская причина, чтобы посмотреть туда, просто дайте мне знать.

1 Ответ

0 голосов
/ 24 сентября 2018

Mix.Task.run/1 выполняет задачу только при первом ее вызове, если она не включена повторно.

Запускает задачу с заданными аргументами.

Если задача былаеще не вызван, он запускает задачу и возвращает результат.

Если существует псевдоним с тем же именем, псевдоним будет вызываться вместо исходной задачи.

Еслизадача или псевдоним уже были вызваны, она не запускается снова и просто прерывается с помощью :noop.

https://hexdocs.pm/mix/Mix.Task.html#run/2

Вы можете использовать Mix.Task.rerun/1 вместо Mix.Task.run/1 для повторного включения и повторного вызова задачи:

...
{"*/5 * * * *", fn -> Mix.Task.rerun "first_mix_task" end},
...
...