我有一个应用程序,其进程需要长时间运行才能传输大量数据。其中一些运行可能需要几天时间。
我希望能够在具有专用队列的 sidekiq 作业中运行这些进程,但 Heroku 的文档并不清楚每日 dyno 重新启动是否会中断作业。
特别是此页面提到dynos支持优雅重启以允许它们完成处理传入请求。这是否也适用于仍在运行工作的 sidekiq 工作人员?
是的,他们会的。你应该做的是分块你的工作并使其在可以恢复的地方幂等。
工作人员将收到
SIGINT
信号,您可以收听该信号,具体取决于您正在使用的作业队列。从信号发出到信号变为 SIGKILL
,您将有 30 秒的时间,并且您将无法正常关机。
没有办法避免 24 小时重新启动,但我听说有些人所做的(如果你无法在 30 秒内关闭)是每 6 小时左右,以编程方式重新启动你自己的服务器,这样它只会重新启动在预期的时间。