#cron-job #job-scheduler #schedule #job #cron #periodic #jobs

lightspeed_scheduler

用于周期性作业的进程内调度器。Schedule 允许您按照 cron 类似的计划运行 Rust 函数。

109 个版本 (52 个重大变更)

0.59.0 2024年7月27日
0.57.0 2024年2月1日
0.55.0 2023年11月13日
0.53.0 2023年2月8日
0.13.6 2020年7月2日

操作系统 中排名 #188

Download history 50/week @ 2024-04-16 22/week @ 2024-04-23 80/week @ 2024-04-30 56/week @ 2024-05-07 62/week @ 2024-05-14 43/week @ 2024-05-21 78/week @ 2024-05-28 68/week @ 2024-06-04 41/week @ 2024-06-11 18/week @ 2024-06-18 63/week @ 2024-07-02 17/week @ 2024-07-09 2/week @ 2024-07-16 163/week @ 2024-07-23 39/week @ 2024-07-30

每月下载量 229
用于 lightspeed

MIT 许可证

43KB
899

lightspeed-scheduler

用于周期性作业的进程内调度器。Schedule 允许您按照 cron 类似的计划运行 Rust 函数。

使用方法

    use std::time::Duration;
    use lightspeed_scheduler::{job::Job, scheduler::{Scheduler, TryToScheduler}, JobExecutor};
    
    #[tokio::main]
    async fn main() {
        let executor = JobExecutor::new_with_utc_tz();
    
        // Run every 10 seconds with no retries in case of failure
        let retries = None;
        executor
            .add_job_with_scheduler(
                Scheduler::Interval {
                    interval_duration: Duration::from_secs(10),
                    execute_at_startup: true,
                },
                Job::new("hello_job", "job_1", retries, move || {
                    Box::pin(async move {
                        println!("Hello from job. This happens every 10 seconds!");
                        Ok(())
                    })
                }),
            )
            .await;
    

        // Run every day at 2:00 am with two retries in case of failure
        let retries = Some(2);
        executor
        .add_job_with_scheduler(
            "0 0 2 * * *".to_scheduler().unwrap(),
            Job::new("hello_job", "job_2", retries, move || {
                Box::pin(async move {
                    println!("Hello from job. This happens every day at 2 am!");
                    Ok(())
                })
            }),
        )
        .await;

        // Start the job executor
        let _executor_handle = executor.run().await.expect("The job executor should run!");

        // Wait for a signal to stop the job executor
        tokio::signal::ctrl_c().await.unwrap();
        
        // Stop the job executor
        let stop_gracefully = true;
        executor.stop(stop_gracefully).await.expect("The job executor should stop!");
    }

cron 调度格式

使用 cron 库的 FromStr 实现,为 Schedule 类型创建作业的调度。

调度格式如下

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 点执行。

致谢

最初基于 https://github.com/mehcode/schedule-rs

依赖项

~5–12MB
~108K SLoC