-- nginx conf 配置
error_log logs/error.log notice;
lua_shared_dict config 1m;
init_worker_by_lua_file shark/worker.lua;
--- worker代码
local cronService = require "classes.service.cronService"
local ngx_shared = ngx.shared
local os_date = os.date
local tonumber = tonumber
local ngx = ngx
local ngx_timer_at = ngx.timer.at
local ngx_log = ngx.log
local function doRun()
local ok, err = ngx_timer_at(60, doRun)
if not ok then
ngx_log(ngx.ERR, "doRun timer err:", err)
return
end
cronService:exec()
end
if not ngx_shared.config:get('hasTimer') then
ngx_shared.config:set('hasTimer', true)
local diff = 60 - tonumber(os_date("%S"))
local ok, err = ngx_timer_at(diff, doRun)
if not ok then
ngx_log(ngx.ERR, "first run timer err:", err)
return
else
ngx_log(ngx.ERR, "first run timer diff:", diff)
end
end
-- cronService 主逻辑
local function refreshRank(desc)
ngx.log(ngx.ERR, "run timer", desc)
end
function CronService:exec()
local nowTime = os_time()
local currWeek = tonumber(os_date("%w", nowTime))
local currHour = tonumber(os_date("%H", nowTime))
local currMinute = tonumber(os_date("%M", nowTime))
local function run(callback, execWeek, execHour, execMinute, ...)
local execWeek = execWeek or nil
local execHour = execHour or nil
local execMinute = execMinute or nil
if (execWeek == nil or currWeek == tonumber(execWeek)) and
(execHour == nil or currHour == tonumber(execHour)) and
(execMinute == nil or currMinute == tonumber(execMinute)) then
local args = { ... } or {}
local status, err = pcall(callback, unpack(args, 1, table_maxn(args)))
if not status then
ngx.log(ngx.ERR, "run timer error", err, "execWeek", execWeek, "execHour", execHour, "execMinute", execMinute, "debug_traces", debug_traceback())
end
end
end
-- 每分钟
run(refreshRank, nil, nil, nil, "每分钟执行")
-- 每小时
run(refreshRank, nil, nil, 0, "每小时执行")
-- 每天0点0分
run(refreshRank, nil, 0, 0, "每天执行")
end
-- error.log
2014/12/29 20:57:00 [error] 18069#0: [lua] cronService.lua:14: run timer每分钟执行, context: ngx.timer
2014/12/29 20:58:00 [error] 18069#0: [lua] cronService.lua:14: run timer每分钟执行, context: ngx.timer
2014/12/29 20:59:00 [error] 18069#0: [lua] cronService.lua:14: run timer每分钟执行, context: ngx.timer
2014/12/29 21:00:00 [error] 18069#0: [lua] cronService.lua:14: run timer每分钟执行, context: ngx.timer
2014/12/29 21:00:00 [error] 18069#0: [lua] cronService.lua:14: run timer每小时执行, context: ngx.timer
2014/12/29 21:01:00 [error] 18069#0: [lua] cronService.lua:14: run timer每分钟执行, context: ngx.timer