#job-scheduler #job-scheduling #cron #cron-job #job #scheduler #jobs

job_scheduler_ng

为 Rust 提供一个类似 cron 的简单作业调度库(自 2022 年更新)

6 个稳定版本

2.0.5 2024 年 4 月 24 日
2.0.4 2023 年 2 月 1 日
2.0.3 2022 年 12 月 10 日
2.0.2 2022 年 10 月 9 日
2.0.0 2022 年 5 月 20 日

#37日期和时间

Download history 963/week @ 2024-05-03 949/week @ 2024-05-10 1228/week @ 2024-05-17 1156/week @ 2024-05-24 1303/week @ 2024-05-31 833/week @ 2024-06-07 987/week @ 2024-06-14 864/week @ 2024-06-21 783/week @ 2024-06-28 1168/week @ 2024-07-05 812/week @ 2024-07-12 897/week @ 2024-07-19 869/week @ 2024-07-26 758/week @ 2024-08-02 1265/week @ 2024-08-09 849/week @ 2024-08-16

3,903 每月下载量
用于 9 个 Crates(直接使用 3 个)

MIT/Apache

15KB
152

JobScheduler

为 Rust 提供一个类似 cron 的简单作业调度库。

https://github.com/lholden/job_scheduler 分支,感谢 @lholden!这是一个尝试维护并可能改进的分支。

更新

2024-04-24 (v2.0.5)

  • 将 MSRV 设置为 v1.61.0 以匹配 chrono 的 v0.4.34 MSRV
  • 更新 tokio 的开发依赖到 v1.37.0 或更高版本
  • 添加了几个 clippy 检查
  • 修复了所有 clippy 报告的项目
  • 将 JobScheduler::new() 设置为 const fn
  • 更新示例以使用 log 函数并始终打印当前线程 ID
  • 添加一个非常简单的哈希以更好地区分 tokio 5 秒示例

2023-02-01 (v2.0.4)

  • 验证 uuid v1.3.0 的工作
  • 使用 miri 检查示例,并添加了 std::process::exit(0); 以生成干净的退出。
  • 将 MSRV 设置为 v1.56.1
  • 更新 tokio 的开发依赖到 v1.25.0 或更高版本

2022-12-10 (v2.0.3)

  • 作业函数不需要 Sync 特性(PR #1 - 感谢 @mikel1703)
  • 添加了两个其他示例。一个是使用线程的示例,另一个也使用了 MPSC。
  • 添加了一些 clippy 检查
  • 修复了一些拼写错误

2022-10-09 (v2.0.2)

  • 更新 cron 到 v0.12.0
  • 将 chrono v0.4.20 设置为最低版本以减轻已知 CVE。

用法

有关详细信息,请参阅文档

请确保将 job_scheduler_ng crate 添加到您的 Cargo.toml

[dependencies]
job_scheduler_ng = "*"

使用 FromStr 实现为 Schedule 类型创建工作计划,该类型来自 cron 库。

调度格式如下

sec   min   hour   day of month   month   day of week   year
*     *     *      *              *       *             *

时间指定为 UTC 而不是您的本地时区。请注意,年份可能省略。

5,8,10 这样的逗号分隔值代表多个时间值。例如,一个调度计划为 0 2,14,26 * * * * 将在每个小时的第2分钟、第14分钟和第26分钟执行。

可以使用破折号指定范围。一个调度计划为 0 0 * 5-10 * * 将每小时执行一次,但只在第5天到第10天执行。

可以指定星期的缩写或全称。一个调度计划为 0 0 6 * * Sun,Sat 将在星期日和星期六的早上6点执行。

简单使用示例

extern crate job_scheduler_ng;
use job_scheduler_ng::{JobScheduler, Job};
use std::time::Duration;

fn main() {
    let mut sched = JobScheduler::new();

    sched.add(Job::new("1/10 * * * * *".parse().unwrap(), || {
        println!("I get executed every 10 seconds!");
    }));

    loop {
        sched.tick();

        std::thread::sleep(Duration::from_millis(500));
    }
}

类似库

  • cron 我们使用的cron表达式解析器。
  • schedule-rs 是一个类似的rust库,实现了自己的cron表达式解析器。

许可协议

JobScheduler 根据以下协议之一许可

贡献

除非您明确说明,否则根据Apache-2.0许可协议定义,您提交的任何有意提交的、旨在包含在作品中的贡献,将根据上述协议双许可,不附加任何额外条款或条件。

有关更多信息,请参阅CONTRIBUTING 文件。

依赖项

~2.2–8MB
~51K SLoC