【发布时间】:2013-11-26 22:50:46
【问题描述】:
每当我们管理大量导入作业时,我们都会使用 Ruby gem。但是,如果下一个 cron 作业发生时仍在导入文件怎么办?
例如:
12am:每当启动 import.csv 的导入 cron 作业时
凌晨 2 点:import.csv 仍在导入中,但下一个 cron 作业已安排在任何时间。
是否会跳过该文件或尝试再次运行它?有什么建议可以确保它不会尝试两次处理同一个文件?
【问题讨论】:
-
使用不同的文件名,例如基于时间戳的名称:
import-yyyy-mm-dd-hh-mm-ss.csv。如果您的导入仍在运行,那么谁在乎,文件名将是唯一的。当长时间运行的文件完成后,您会查看是否有任何其他文件可用并开始处理这些文件。 -
保存记录哪些文件已排队、正在运行和已完成。
-
简单地为文件使用不同的名称并不是一个好的解决方案。如果应用程序由于某种原因运行缓慢或停止,那么后续作业可能会因为同样的原因运行缓慢或停止,这会级联直到机器阻塞。相反,代码本身必须感知其他实例是否正在运行并退出并通知某人。如果作业没有按时完成,应该有一个已知的原因,应该对其进行分析,然后写入代码。