如何只启动一个 timer 工作?
这里需要给大家介绍一个重要 API 。
- 语法:
注意: 该方法只对 Nginx 1.9.1+ 版本返回有意义的值。更早版本的 Nginx,将总是返回 。
解决方案
剩下的问题就比较简单了,完全可以把我们的 timer 绑定到某个特定的 worker 上,这样即可。 下面的例子,演示如何只在 worker.id 为 0 的进程上运行后台 timer。
init_worker_by_lua_block {
local delay = 3 -- in seconds
local new_timer = ngx.timer.at
local log = ngx.log
local check
check = function(premature)
-- do the health check or other routine work
local ok, err = new_timer(delay, check)
if not ok then
log(ERR, "failed to create timer: ", err)
return
end
end
if 0 == ngx.worker.id() then
local ok, err = new_timer(delay, check)
if not ok then
log(ERR, "failed to create timer: ", err)
return
end
}