定期延迟任务

7
我正在使用 Delayed Job 来管理后台工作。然而,我有一些需要定期执行的任务。每小时、每天或每周执行一次,例如。
目前,当我执行任务时,我创建一个新任务,以在一天/一周/一个月内执行。
但是我并不是很喜欢这样做。如果由于任何原因,任务没有完全执行,我们将不会创建下一个任务,可能会失去任务的执行。
您如何处理这种情况(使用 delayed job)来确保您的常规任务列表保持正确?
2个回答

5
如果您可以访问Cron,我强烈推荐使用Whenever。

http://github.com/javan/whenever

在简单的Ruby中,您可以指定想要运行的内容以及频率,每当供应商提供rake任务时,就会将其转换为crontab并更新系统的crontab。如果您没有频繁的cron访问权限(例如我没有,因为我们在Heroku上),那么DJ是一种选择。您有几个选项:1.继续当前操作。DJ将重试每个任务一定次数,因此您有一些宽限期;2.将创建下一个DJ作业的代码放入ensure块中,以确保即使出现异常或其他错误事件也会创建该代码;3.创建另一个DJ定期运行,检查是否存在适当的DJ,并在不存在时创建它们。当然,这与其他选项一样容易出错,因为监视器和实际DJ都在同一环境中运行,但这是一种选择。

很好的事情,无论何时。有一些任务可以让我在更改内容时重新加载crontab(我需要动态更改任务)。谢谢:) - Damien MATHIEU

1

你不使用cron来处理这种事情,有什么特别的原因吗? 或者可能更适合ruby风格的rufus-scheduler之类的工具,它非常易于使用且非常可靠。

如果你不需要排队,我认为这些工具是一个好选择。


1
我已经有了延迟作业守护进程。我想避免启动第二个。 - Damien MATHIEU
你不需要使用rufus-scheduler启动任何新的守护进程。它使用简单的循环或EventMachine来检查要运行的作业。cron是一个守护进程,但通常情况下你需要让它保持运行状态。 - Milan Novota

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接