SuperAPI AI 工具集

iii-cron

通用与其它

查看项目

更新于 10-15 22:17

技能介绍

用途:iii-cron 是 iii 框架中的定时调度 worker,用于让已注册函数按 cron 表达式周期性执行,无需额外部署独立调度进程或系统 crontab。它不暴露任何可调用函数,全部能力只有一种触发器类型 cron,通过 iii.registerTrigger({ type: 'cron', function_id, config }) 绑定。

主要能力:每次触发时引擎构造事件负载,可选先执行条件函数,再通过配置的适配器获取锁,然后调用目标函数。每次触发会报告 scheduled_time 与 actual_time,便于在处理器内观察漂移与重入。表达式采用 7 字段 cron 方言:秒 分 时 日 月 周 [年],年可选,默认 *;6 字段与 7 字段均可,首字段始终是秒,因此 0 */5 * * * * 表示每 5 分钟的第 0 秒触发,而非每 5 秒。

使用方式:先注册处理器 iii.registerFunction('jobs::cleanup-old-data', handler),再注册触发器,config.expression 为必填,解析失败会同步报错。同一 function_id 可绑定多个不同 id 的触发器以驱动多个计划,触发 id 会作为 job_id 出现在事件中;处理器返回值被忽略。条件跳过通过 condition_function_id 实现,引擎在每次运行前求值,结果为假或报错时跳过处理器并释放锁。

适配器与限制:kv(默认)只做进程内锁,仅适用于单实例;多实例集群需用 redis 适配器实现分布式锁与只触发一次(可调 redis_url)。kv 可调 lock_ttl_ms、lock_index。注意:默认 kv 适配器在多实例部署下不可依赖其只执行一次;把首字段当分钟(5 字段 crontab 习惯)会导致触发频率高 60 倍。数据变更或流变更反应应使用 iii-state / iii-stream,iii-cron 只按时间触发。事件负载字段(trigger、job_id、scheduled_time、actual_time)可通过 iii get function info 查询。