11 个稳定版本

1.2.3 2024 年 8 月 13 日
1.2.2 2023 年 4 月 27 日
1.2.1 2022 年 8 月 10 日
1.1.3 2022 年 6 月 19 日
1.0.3 2022 年 6 月 19 日

#495并发

Download history 4/week @ 2024-05-27 14/week @ 2024-07-29 121/week @ 2024-08-12

每月 135 下载
2 crates 中使用

MIT 许可证

12KB
120

rcron

一个简单的类似于 cron 的 Rust 作业调度库

使用方法

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

[dependencies]
rcron = "1.2.3"

使用 cron 库中 Schedule 类型的 FromStr 实现,为作业创建一个计划。

调度格式如下

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

时间是指定 Local 您的本地时区。

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

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

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

简单使用示例

use rcron::{JobScheduler, Job};
use std::time::Duration;

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

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

    sched.add(Job::new("1/5 * * * * *".parse().unwrap(), || {
        println!("exec task every 5 seconds!");
    }));

    loop {
        sched.tick();

        std::thread::sleep(Duration::from_millis(500));
        
        // Or use the following method.
        // The `time_till_next_job` method returns the duration till the next job is supposed to run. 
        // std::thread::sleep(sched.time_till_next_job());
    }
}

示例

cargo run --package rcron --example rcron_basic 

    Finished dev [unoptimized + debuginfo] target(s) in 0.09s
     Running `target/debug/examples/rcron_basic`
exec task every 10 seconds!
exec task every 5 seconds!
exec task every 5 seconds!
exec task every 10 seconds!
exec task every 5 seconds!
exec task every 5 seconds!
exec task every 10 seconds!
exec task every 5 seconds!
exec task every 5 seconds!

类似库

  • cron 我们使用的 cron 表达式解析器。
  • schedule-rs 是一个类似的 Rust 库,它实现了自己的 cron 表达式解析器。
  • tokio-cron-scheduler 使用 cron 类型的注解在 Tokio 上安排任务。

参考

许可证

rcron 使用以下任意一种许可证

  • MIT 许可证

依赖项

~2.2–7.5MB
~52K SLoC