如何在 Heroku 上安全关闭 Sidekiq
How to safely shut down Sidekiq on Heroku
我想我需要在这里进行完整性检查,因为如果我想防止任何 sidekiq 作业过早结束,Heroku Redis 应该为我处理吗?
当我想将新更改推送到生产站点时,我将应用程序置于维护模式:heroku maintenance:on
。现在,当我这样做时,运行 heroku ps
我可以看到我的 web
进程和我的 worker
(即 sidekiq)仍在运行(有道理,因为它只是为了防止用户有权访问网站)。
如果我用这样的命令关闭 worker
dyno:heroku ps:stop worker
在站点处于维护模式之后,这会在它关闭之前安全地停止 sidekiq worker 吗?此外,来自 Sidekiq 的文档:
https://github.com/mperham/sidekiq/wiki/Deployment#heroku
它提到了一个 -t N
开关,其中 N 是一个以秒为单位的数字,但 Heroku 有一个硬性限制,允许进程在 30 秒内自行关闭。我是否正确,如果我用 heroku 命令停止 worker
进程,它会给任何当前 运行ning 作业 N
秒,然后再给它一个 SIGTERM
信号?
如果没有,我需要采取哪些额外步骤来确保 Sidekiq 已安全关闭?
听起来你很好。当您调用 ps:stop
时,Heroku 会发送 SIGTERM。发送 SIGTERM 告诉 Sidekiq 在 N 秒内关闭。你的 worker dyno 应该会在 30 秒内安全降落。
我想我需要在这里进行完整性检查,因为如果我想防止任何 sidekiq 作业过早结束,Heroku Redis 应该为我处理吗?
当我想将新更改推送到生产站点时,我将应用程序置于维护模式:heroku maintenance:on
。现在,当我这样做时,运行 heroku ps
我可以看到我的 web
进程和我的 worker
(即 sidekiq)仍在运行(有道理,因为它只是为了防止用户有权访问网站)。
如果我用这样的命令关闭 worker
dyno:heroku ps:stop worker
在站点处于维护模式之后,这会在它关闭之前安全地停止 sidekiq worker 吗?此外,来自 Sidekiq 的文档:
https://github.com/mperham/sidekiq/wiki/Deployment#heroku
它提到了一个 -t N
开关,其中 N 是一个以秒为单位的数字,但 Heroku 有一个硬性限制,允许进程在 30 秒内自行关闭。我是否正确,如果我用 heroku 命令停止 worker
进程,它会给任何当前 运行ning 作业 N
秒,然后再给它一个 SIGTERM
信号?
如果没有,我需要采取哪些额外步骤来确保 Sidekiq 已安全关闭?
听起来你很好。当您调用 ps:stop
时,Heroku 会发送 SIGTERM。发送 SIGTERM 告诉 Sidekiq 在 N 秒内关闭。你的 worker dyno 应该会在 30 秒内安全降落。