在我的elixir应用程序中,我正在使用此库https://github.com/quantum-elixir/quantum-core实现一个cron作业。下面是我的相同代码。
defp deps do
[{:quantum, "~> 2.2"},
{:timex, "~> 3.0"}]
end
defmodule MyApp.Scheduler do
use Quantum.Scheduler,
otp_app: :my_app
end
defmodule MyApp.Application do
use Application
def start(_type, _args) do
import Supervisor.Spec, warn: false
children = [
# This is the new line
worker(MyApp.Scheduler, [])
]
opts = [strategy: :one_for_one, name: MyApp.Supervisor]
Supervisor.start_link(children, opts)
end
end
然后我正在配置cron job以打印这样的消息。
config :my_app, MyApp.Scheduler,
jobs: [
{"* * * * *", fn -> IO.puts("Hello QUANTUM!") end}
]
如何在本地测试cron作业是否正常。我试图使用mix run
但似乎没有任何内容可以打印消息。
答案 0 :(得分:3)
根据默认定义的Cron作业限制为1分钟。
请考虑以下时间表:
* * * * * command to be executed
- - - - -
| | | | |
| | | | +----- day of week (0 - 6) (Sunday=0)
| | | +------- month (1 - 12)
| | +--------- day of month (1 - 31)
| +----------- hour (0 - 23)
+------------- min (0 - 59)
您遇到的问题是您运行了程序,但在1分钟后退出,认为它不起作用。
如果一分钟后仍然没有看到任何内容,请执行:observer.start
并仔细检查supervision
树是否已启动并在Applications
标签下运行。也许您忘记在mix
文件中包含应用程序监督树的启动。
在这种情况下,您需要做的就是在mix
文件中包含以下内容,以适用于mod
字段下的具体内容:
def application do
[
mod: {Cronjob.Application, []},
extra_applications: [:logger]
]
end
当然,当你需要运行测试时,等待几分钟只是为了确认你的代码是完全荒谬的。
正是出于这个原因,已经引入了扩展形式的cron作业,并且您正在使用的库也可以使用。
以下是这样做的方法:
jobs: [
{{:extended, "* * * * * *"}, {Cronjob, :hello, []}},
],
答案 1 :(得分:0)
我的不好,我忘了在混合文件中包含启动应用程序监督树。
def application do
[
extra_applications: [:logger],
mod: {CnabClient.Application, []}
]
end