lightspeed_scheduler

Crates.iolightspeed_scheduler
lib.rslightspeed_scheduler
version0.59.0
sourcesrc
created_at2020-04-02 09:43:55.115665
updated_at2024-07-27 13:52:28.40216
descriptionAn in-process scheduler for periodic jobs. Schedule lets you run Rust functions on a cron-like schedule.
homepagehttps://github.com/LightHero/lightspeed
repositoryhttps://github.com/LightHero/lightspeed
max_upload_size
id225452
size42,407
Francesco CinĂ  (ufoscout)

documentation

README

lightspeed-scheduler

An in-process scheduler for periodic jobs. Schedule lets you run Rust functions on a cron-like schedule.

Usage

    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 schedule format

Creating a schedule for a job is done using the FromStr impl for the Schedule type of the cron library.

The scheduling format is as follows:

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

Time is specified for UTC and not your local timezone. Note that the year may be omitted.

Comma separated values such as 5,8,10 represent more than one time value. So for example, a schedule of 0 2,14,26 * * * * would execute on the 2nd, 14th, and 26th minute of every hour.

Ranges can be specified with a dash. A schedule of 0 0 * 5-10 * * would execute once per hour but only on day 5 through 10 of the month.

Day of the week can be specified as an abbreviation or the full name. A schedule of 0 0 6 * * Sun,Sat would execute at 6am on Sunday and Saturday.

Credits

Originally based on https://github.com/mehcode/schedule-rs

Commit count: 579

cargo fmt