在具有多个play 2框架实例的服务器上执行外部脚本

时间:2013-02-12 19:07:51

标签: scala cron playframework-2.0

我有一个linux服务器,上面有三个播放2框架实例,我想定期执行一个外部Scala脚本,该脚本可以访问所有应用程序环境(模型),并且一次只能执行一次。

我想从crontab调用此脚本,但我找不到任何有关如何执行此操作的文档。我知道我们可以从Global对象安排异步任务,但我希望脚本只对三个播放实例执行一次。

实际上,我想做的事情就像Ruby on Rails那样为那些了解它们的人提供任务。

1 个答案:

答案 0 :(得分:0)

为此任务创建一个常规action,可通过http访问,然后您可以使用ie。在unix'curlcrontab调用该操作,它将触及第一个可用实例。

其他可能性是......使用Global对象来安排具有Akka支持的任务。在这种情况下,为了确保只有一个实例将调度任务,您需要确定它应该是哪一个。如果要使用指定端口启动所有3个实例(每个实例始终相同),则可以阅读http.port以允许或跳过执行。

最后,您可以使用数据库通知其他实例,该任务刚刚执行:所有3个实例都尝试执行Akka调度程序,但在执行任务之前,他们可以检查此任务是否仍有TODO标志。如果没有,实例将TODO标志设置为false并继续执行,否则这次只是跳过执行。

此外,您可以使用文件系统进行类似的方法:在执行开始时,创建flag-file以通知其他实例,这次他们可以跳过任务。