14

我有兴趣运行一个运行时间很长的 rake 任务,这个任务需要几个小时才能完成,我有兴趣了解处理这个问题的最佳实践。

我发现的可能解决方案:

  1. 设置 cron 作业
  2. 延迟作业
  3. 回复

cron 似乎是一个简单的设置解决方案,但它是否适合非常长的任务?您使用什么以及您的解决方案的优点/缺点是什么?

4

2 回答 2

32

我个人喜欢 Resque,您可以使用 resque-scheduler gem 来处理长时间运行或周期性的任务。

如果您不必经常运行您的任务,您可以妖魔化 rake 任务,以确保它在您的 SSH 会话终止或其他情况下继续运行。

尝试这样的事情:

nohup rake my:task &

nohup会将输出发送到nohup.out您运行任务的目录中,并且还会让您的 ssh 会话在进程不死的情况下退出,其次&将其作为守护进程运行。

于 2012-03-26T18:33:00.163 回答
1

在我创建的一个应用程序中,用户能够上传 PDF 文件,这些文件在上传时被缩略图以创建预览图像。由于 PDF 可能非常大,缩略图可能需要一段时间并且必须在后台运行。为此,我使用了

从好的方面来说,你得到了漂亮的 Resque GUI 来查看你的工人在行动,你有上帝在那里观察(并杀死,并重新启动)失控的进程(当你在处理时往往会发生很多ImageMagick 中的 PDF),使整个事情更加稳定和可靠。

不利的一面是,设置它比 cron 作业要难得多。但是让 cron 在不受监控的情况下运行一个长时间的、内存密集型的进程对我来说似乎是一场灾难。

希望有帮助!

于 2012-03-26T18:54:48.297 回答