码迷,mamicode.com
首页 > 其他好文 > 详细

openresty跑定时任务配置&启动

时间:2018-01-10 17:33:53      阅读:903      评论:0      收藏:0      [点我收藏+]

标签:定时任务   init   creat   end   second   默认   world   sse   分享图片   

openresty的定时任务是要跟worker绑定的。如果不绑定特定的worker,那么所有启动的woker都会去执行定时任务。

一般情况下默认绑定worker_id=0的,这样在nginx整个进程里面,就只执行一个timer。

在conf中具体的位置可以写自己的任务逻辑。

具体的nginx.conf配置如下:

worker_processes  1;
error_log logs/error.log;
events {
    worker_connections 1024;
}


http {
	init_worker_by_lua_block {
	     local delay = 2  -- in seconds
	     local new_timer = ngx.timer.at
	     local log = ngx.log
	     local ERR = ngx.ERR
	     local check

	     check = function(premature)
	         if not premature then
	             -- do the health check or other routine work
	             log(ERR, "mm test mm test")
	             local ok, err = new_timer(delay, check)
	             if not ok then
	                 log(ERR, "failed to create timer: ", err)
	                 return
	             end
	         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
	     end
	}

    server {
        listen 8081;
        location / {
            default_type text/html;
            content_by_lua ‘
                ngx.say("<p>hello, world</p>")
            ‘;
        }

		location = /app/test {
		    content_by_lua_block {
		        local res = ngx.location.capture(
		                        "/sum", {args={a=3, b=8}}
		                        )
		        ngx.say("status:", res.status, " response:", res.body)
		    }
		}
		location = /sum {
		    internal;
		    content_by_lua_block {
		        ngx.sleep(0.1)
		        local args = ngx.req.get_uri_args()
		        ngx.print(tonumber(args.a) + tonumber(args.b))
			}
		}

		location = /subduction {
		    internal;
		    content_by_lua_block {
		        ngx.sleep(0.1)
		        local args = ngx.req.get_uri_args()
		        ngx.print(tonumber(args.a) - tonumber(args.b))
		    }
		}

		location = /app/test_parallels {
		    content_by_lua_block {
		        local start_time = ngx.now()
		        local res1, res2 = ngx.location.capture_multi( {
		                        {"/sum", {args={a=3, b=8}}},
		                        {"/subduction", {args={a=3, b=8}}}
		                    })
		        ngx.say("status:", res1.status, " response:", res1.body)
		        ngx.say("status:", res2.status, " response:", res2.body)
		        ngx.say("time used:", ngx.now() - start_time)
		    }
		}

		location = /app/test_queue {
		    content_by_lua_block {
		        local start_time = ngx.now()
		        local res1 = ngx.location.capture_multi( {
		                        {"/sum", {args={a=3, b=8}}}
		                    })
		        local res2 = ngx.location.capture_multi( {
		                        {"/subduction", {args={a=3, b=8}}}
		                    })
		        ngx.say("status:", res1.status, " response:", res1.body)
		        ngx.say("status:", res2.status, " response:", res2.body)
		        ngx.say("time used:", ngx.now() - start_time)
		    }
		}
}
}

注意init_worker_by_lua_block是放在http里面的。因为此处只配置了error.log,因此是打印的err级别的日志,方便观察。

接下来启动ngin:sudo nginx -p `pwd`/ -c conf/nginx.conf

然后tailf logs/error.log:

技术分享图片

追日志会发现,每隔2s就会打印一条日志。

 

openresty跑定时任务配置&启动

标签:定时任务   init   creat   end   second   默认   world   sse   分享图片   

原文地址:https://www.cnblogs.com/sonofelice/p/8259712.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!