openresty 定时器

【1】nginx定时器应用nginx

(1)文件目录结构ui

(2)nginx.conf配置lua

lua_package_path  "/usr/local/lib/ubcsrvd/lualib/?.lua;;";

init_worker_by_lua_file work/bill_timer.lua;

(3)配置定时器时间spa

公共配置文件config.lua3d

-- 公共配置文件

local _M = {}

-- 吃饭定时器(3m)
_M.eat_timer_interval = 180
    
-- 其余
-- TO DO ....

return _M

(4)定时器应用代码code

    -- 定时器应用示例

    local cfg = require("config")
    local new_timer = ngx.timer.at
   
    local function timer_eat(premature)
        ngx.log(ngx.ERR, "premature : " .. ((premature and {"true"} or {"false"})[1]))
        if not premature then
            ngx.log(ngx.ERR, "timer to do eat .....")
            local rtn, err = new_timer(cfg.eat_timer_interval, timer_eat)
            if not rtn then
                ngx.log(ngx.ERR, "failed to create timer to eat : ", err)
            else
                ngx.log(ngx.ERR, "success to create timer to eat interval(s) : " .. cfg.eat_timer_interval)
            end
        end
    end
 
    if 0 == ngx.worker.id() then
        local rtn, err = new_timer(cfg.eat_timer_interval, timer_eat)
        if not rtn then
            ngx.log(ngx.ERR, "failed to create timer to eat : ", err)
        else
            ngx.log(ngx.ERR, "success to create timer to eat interval(s) : " .. cfg.eat_timer_interval)
        end
    end

(5)0 == ngx.worker.id()blog

注意:本地nginx启动后,工做进程配置的是3个。接口

ngx.worker.id() 为0 表示第一个工做进程。即这个定时器由进程1管理执行。进程

若想启动多个定时器,且分别由不一样的进程管理执行,能够使用ngx.worker.id()为1或2等等其余进程。rem

固然,具体使用那个进程(必须知足:ngx.worker.id() < worker_processes)须要根据nginx.conf配置文件中worker_processes字段具体配置的工做进程个数。

 

【2】参数premature应用

(1)场景1:启动nginx

(2)场景2:关闭nginx

(3)场景3:重启nginx

(4)场景4:加载nginx配置 reload

(5)其余场景

【3】总结

nginx定时器应用示例如上。

执行定时器任务接口,增长premature参数,结合具体场景分析过程。

 

Good Good Study, Day Day Up.

顺序 选择 循环 总结

相关文章
相关标签/搜索