我用Ruby(2.4.1)创建了Rails(版本5)应用程序。我在部署过程中使用DigitalOcean实例和Cloud66。我正在使用Sidekiq作为背景处理。我的每一次部署都会从sidekiq扼杀一些长时间运行的进程,而这不会再试一次。sidekiq中的每个任务都更重要,所以我想在不影响这些任务的情况下进行部署。是否有任何方法可以在不影响目前运行的进程的情况下进行部署?
提前谢谢。
发布于 2017-12-21 10:47:55
最终我找到了解决办法。
在开始部署之前,我使用了预部署钩子来发送TSTP,然后发送术语来优雅地关闭sidekiq进程。因此,在开始部署之前,所有的sidekiq进程都将被优雅地杀死,这些作业将使用由最新部署创建的sidekiq进程来执行。
TSTP --这将停止从redis接收即将到来的任务。
用法:例如:kill -TSTP <sidekiq-processid>
<>TERM --这将在-t timeout_value选项中提到的时间内终止进程,假设运行作业未完成,则侧翼进程将被终止,作业将再次推入队列,作业将使用相同的参数再次执行。
注意:在从一开始就再次执行同一任务没有问题时使用此方法。
发布于 2017-12-15 11:41:33
Sidekiq支持优雅的关闭,这意味着它为运行的作业提供了一段时间的完成。默认情况下,我相信大概是30秒。
您可以在config/sidekiq.yml中调整等待时间。
:timeout: 120https://stackoverflow.com/questions/47831256
复制相似问题