首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Elixir或菲尼克斯框架中安排每隔几个小时运行一次代码?

如何在Elixir或菲尼克斯框架中安排每隔几个小时运行一次代码?
EN

Stack Overflow用户
提问于 2015-08-19 01:47:45
回答 9查看 35.1K关注 0票数 229

因此,假设我想发送一堆电子邮件,或者每隔4小时重新创建一次站点地图,我在凤凰城怎么做,或者仅仅用药剂呢?

EN

回答 9

Stack Overflow用户

回答已采纳

发布于 2015-08-19 14:12:48

有一个简单的替代方案不需要任何外部依赖:

代码语言:javascript
复制
defmodule MyApp.Periodically do
  use GenServer

  def start_link(_opts) do
    GenServer.start_link(__MODULE__, %{})
  end

  def init(state) do
    schedule_work() # Schedule work to be performed at some point
    {:ok, state}
  end

  def handle_info(:work, state) do
    # Do the work you desire here
    schedule_work() # Reschedule once more
    {:noreply, state}
  end

  defp schedule_work() do
    Process.send_after(self(), :work, 2 * 60 * 60 * 1000) # In 2 hours
  end
end

现在在你的监管树上:

代码语言:javascript
复制
children = [
  MyApp.Periodically
]

Supervisor.start_link(children, strategy: :one_for_one)
票数 473
EN

Stack Overflow用户

发布于 2016-08-04 22:01:00

量子允许您在运行时创建、查找和删除作业。

此外,在创建cronjob时,可以将参数传递给任务函数,如果您对UTC不满意,甚至可以修改时区。

如果您的应用程序作为多个独立实例(例如Heroku)运行,则有由PostgreSQL或Redis支持的作业处理器,它们也支持任务调度:

欧班:https://github.com/sorentwo/oban

Exq:https://github.com/akira/exq

托尼克:https://github.com/joakimk/toniq

Verk:https://github.com/edgurgel/verk

票数 42
EN

Stack Overflow用户

发布于 2015-08-19 04:48:30

为此您可以使用埃尔克龙。你用它就像

代码语言:javascript
复制
job = {{:weekly, :thu, {2, :am}},
  {:io, :fwrite, ["It's 2 Thursday morning~n"]}}

:erlcron.cron(job)

job是一个二元元组.第一个元素是表示作业计划的元组,第二个元素是函数或MFA()。在上面的例子中,我们每周四凌晨2点运行一次:io.fwrite("It's 2 Thursday morning")

希望这能帮上忙!

票数 25
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32085258

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档