Cron Logic(Lua):Cron Logic是一个Lua库,用于解析和执行类似于Cron表达式的时间计划。Cron表达式是一种基于时间的表达式,用于指定何时应运行计划的任务。Cron Logic使Lua能够轻松地解析和执行Cron表达式,从而实现自动化任务调度。这个库被广泛应用于服务器端的自动化任务调度、定时任务等领域。

我正在使用Lua Jit开发类似Unix的Cron,但我在算法方面遇到了一些麻烦。也许我的逻辑顺序或执行顺序不够好,我想得到一些伪代码来帮助自己编写代码。

如果我收到

`'* * * * *'`

我需要每小时每分钟执行一次任务;如果我收到

'20 2 2 1 5'

我需要处理它,并且给出类似日期格式的响应,这不是重点。

我的问题在于如何以正确的方式执行所有操作,考虑所有可能的情况。我不是在寻找具体的代码,只是希望可以打开思路,理解实际翻译的方式。

点赞
用户1243636
用户1243636

首先,阅读https://en.wikipedia.org/wiki/Cron

你需要像这样查找:

找到当前时间

current_datetime = get_datetime()
-> {year=.., month=.., day=.., weekday=.., hour=.., min=.., sec=..}

找到设置

given_string = '20 2 2 1 5 user, command'
cron_config, user, command = parse_cron_config(given_string) -> 一些对象和cmd

然后检查:

-- 如果日期错误则跳过

if cron_config:weekday_specified() or cron_config:monthday_specified() then
    if cron_config:weekday_specified() and current_datetime.weekday ~= cron_config.weekday then
        return  -- 跳过!
    elseif ...
    end
end

if cron_config:hour_specified() and current_datetime.hour ~= cron_config.hour then
    return
end

...

-- 最后发现所有检查都完成了,可以执行操作了

perform_job(command)
2015-03-15 14:36:17