Play 2 中的 Crontab 样式调度。4.x?

Crontab style scheduling in Play 2.4.x?

从技术上讲,我可以在机器上安装 cron 和 curl url,但我正在努力避免这种情况。有什么方法可以做到这一点?

我想避免使用 cron 的原因是这样我就可以轻松地更改计划或完全停止它,而无需通过 ssh 进入机器来执行此操作。

您可以使用 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

取自文档的示例:

名为“每 30 秒”的示例计划,每 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