2011-06-08 86 views
7

这是更多的实现问题,但是使用像cron这样简单的任务来安排诸如mapreduce for MongoDB之类的任务有什么缺点吗?说每小时需要执行一次,这似乎是一个合适的方式来做到这一点......但我想我只是问,因为像Resque和其他所有流行的工作排队系统。为MongoDB调度MapReduce作业

我想我的问题更像,cron是否提供了坚实可靠的解决方案?思考?

回答

8

克朗已经使用了几十年,是相当可靠和坚实;如果你的cron不可靠,那么我建议与你的操作系统供应商进行严格的讨论。另外,MongoDB文档讨论了cron作业(例如谷歌“site:mongodb.org cron”),所以大概cron作业是MongoDB的预期。这就是说,如果你已经为另一个调度系统设置了一堆基础设施,那么可能没有理由使用cron来执行MongoDB,而其他任务则可能使用其他方法。

在任何情况下,你可能会想层上的简单的PID文件锁定系统,如果你的cron作业可能需要足够长的时间重叠,而您只需要一个同时运行:

  • 这个cron作业在启动时查找PID文件。
  • 如果找到该文件,则它会从文件中读取旧作业的PID并检查它是否仍在运行。
    • 如果旧的运行,那么新的会抱怨并退出。
    • 如果旧的没有运行,那么新的将继续运行。
  • 当新作业决定可以启动时,它会将其PID写入PID文件。
  • 新作业完成后,它会在退出前立即删除PID文件(或使用atexit处理程序或您的环境支持的任何类似功能)。