浩文 联系 关于本站 登录 注册

信号

commit信息:Updated Signals (markdown) | 提交者:mperham | 提交时间:2020-04-03 | 版本:81acf26

Sidekiq可以响应多种信号。在Unix机器上,你可以像下面这样使用kill程序以及Ruby中的Process.kill API:

kill -TTIN pid
Process.kill("TTIN", pid)

TTIN

通过给进程中所有的线程输出回溯,Sidekiq可以给日志记录器响应TTIN信号。这在调试一个dead或者stuck的Sidekiq进程时很有用。

TSTP

TSTP信号示意Sidekiq成为"quiet",这是因为Sidekiq将在不久之后被关闭。它将停止获取新作业,但是会继续执行当前的作业。使用TSTP + TERM可以保证在一定时间内关闭Sidekiq。在部署开始时发送TSTP,在部署结束时发送TERM,这是最佳实践。

请注意,你仍然需要发送TERM才能实际退出Sidekiq进程。

quiet信号曾经是USR1,但在Sidekiq 5.0中已更改为TSTP。

USR2

6.0以下版的Sidekiq使用USR2来维护日志文件。该功能在6.0中已经被移除了。

Sidekiq企业版使用USR2来做rolling restart的触发器。

TERM

TERM示意Sidekiq应该在启动时给予的-t超时选项时间内关闭。它将停止接受新的任务,但是会继续处理当前的消息(就像TSTP一样)。任何没有在超时时间内完成的workers会被强制关闭,并且它们的消息将被送回Redis以便在Sidekiq启动时重新执行它们。超时时间默认是25秒,这是因为Heroku程序必须~~在30秒内~~退出。

API

Sidekiq的[[API]]有一些helpers,用来把这些信号发送给在不能使用信号的环境里运行的进程。像是,JRuby, Heroku 或者其它的环境。 例如:

require 'sidekiq/api'
Sidekiq::ProcessSet.new.each(&:quiet!)

Capistrano

Capistrano integration在每次部署程序启动时发送TSTP信号,并且在部署程序结束时发送TERM信号,从而给Sidekiq workers完成工作提供最大的时间。由于Capistrano部署程序通常花费60秒或者更多的时间,因此默认超时时间通常是有效的,因为在TERM被发出时,所有的workers已经完成它们的当前作业。

上一篇: 日志记录 下一篇: FAQ