【发布时间】:2015-12-10 23:17:16
【问题描述】:
从技术上讲,我可以在机器上安装 cron 并卷曲 url,但我试图避免这种情况。有什么方法可以做到这一点?
我想避免使用 cron 的原因是,我可以轻松更改计划或完全停止它,而无需通过 ssh 进入机器来这样做。
【问题讨论】:
标签: scala playframework cron scheduled-tasks
从技术上讲,我可以在机器上安装 cron 并卷曲 url,但我试图避免这种情况。有什么方法可以做到这一点?
我想避免使用 cron 的原因是,我可以轻松更改计划或完全停止它,而无需通过 ssh 进入机器来这样做。
【问题讨论】:
标签: scala playframework cron scheduled-tasks
您可以使用 Akka 调度程序。
val scheduler = Akka.system(app).scheduler
scheduler.schedule(0 seconds, 1 hour) {
// run this block every hour
}
第一个参数是延迟,因此如果您想延迟到特定时间,您可以通过一些简单的日期算法轻松计算目标时间。
【讨论】:
看看:https://github.com/enragedginger/akka-quartz-scheduler。 有关有效的 CronExpressions 和示例,请参阅 http://quartz-scheduler.org/api/2.1.7/org/quartz/CronExpression.html。
来自文档的示例:
一个名为 Every-30-Seconds 的示例计划,它恰当地每 30 秒触发一次:
akka {
quartz {
schedules {
Every30Seconds {
description = "A cron job that fires off every 30 seconds"
expression = "*/30 * * ? * *"
calendar = "OnlyBusinessHours"
}
}
}
}
您可以将其集成到您的 Play 中!应用程序(可能在您的全局应用程序中)
【讨论】:
查看https://github.com/philcali/cronish
来自README.md的一些示例代码:
val payroll = task {
println("You have just been paid... Finally!")
}
// Yes... that's how you run it
payroll executes "every last Friday in every month"
val greetings = job (println("Hello there")) describedAs "General Greetings"
// give a delayed start
val delayed = greetings runs "every day at 7:30" in 5.seconds
// give an exact time to start
val exact = greetings runs "every day at noon" starting now + 1.week
// resets a job to its definition
val reseted = exact.reset()
reseted starting now + 1.day
【讨论】: