#tokio #schedule #cron #task-scheduling #async #cron-job

tokio_schedule

This crate helps schedule tasks in tokio runtime

6 releases

0.3.1 Jul 3, 2023
0.3.0 May 22, 2021
0.2.1 May 10, 2021
0.1.1 May 10, 2021

#102 in Asynchronous

Download history 375/week @ 2023-12-07 426/week @ 2023-12-14 234/week @ 2023-12-21 265/week @ 2023-12-28 440/week @ 2024-01-04 615/week @ 2024-01-11 560/week @ 2024-01-18 719/week @ 2024-01-25 762/week @ 2024-02-01 560/week @ 2024-02-08 1354/week @ 2024-02-15 1494/week @ 2024-02-22 2098/week @ 2024-02-29 2698/week @ 2024-03-07 3790/week @ 2024-03-14 2867/week @ 2024-03-21

11,701 downloads per month
Used in 18 crates (3 directly)

Custom license

47KB
1.5K SLoC

MIT licensed Version Code Coverage Downloads

This crate provides a library for scheduling periodic tasks. It is inspired by python's schedule lib and provides similar API. It is built on tokio (version 1) and chrono lib

Documentation link

Crates.io link

Example

use std::error::Error;
use chrono::{Utc, Duration, Weekday};
use tokio::spawn;
use tokio_schedule::{every, Job};

#[tokio::main]
async fn main() -> Result<(), Box<dyn Error>> {
    let weekly = every(1).week().on(Weekday::Mon).at(12, 00, 00)
        .in_timezone(&Utc).perform(|| async { println!("Every week job") });
    spawn(weekly);

    let even_weekly = every(2).weeks().on(Weekday::Mon).at(12, 00, 00)
        .in_timezone(&Utc).perform(|| async { println!("Every even week job") });
    spawn(even_weekly);

    let every_30_seconds = every(30).seconds() // by default chrono::Local timezone
        .perform(|| async { println!("Every minute at 00'th and 30'th second") });
    spawn(every_30_seconds);

    let every_30_minutes = every(30).minutes().at(20).in_timezone(&Utc)
        .perform(|| async { println!("Every 30 minutes at 20'th second") });
    spawn(every_30_minutes);

    let every_hour = every(1).hour().at(10, 30).in_timezone(&Utc)
        .perform(|| async { println!("Every hour at :10:30") });
    spawn(every_hour);

    let every_second_1_day = every(1).second().until(&(Utc::now() + Duration::days(1)))
        .in_timezone(&Utc).perform(|| async { println!("Every second until next day") });
    spawn(every_second_1_day);

    let every_day = every(1).day().at(10, 00, 00)
        .in_timezone(&Utc).perform(|| async { println!("I'm scheduled!") });
    every_day.await;

    Ok(())
}

Timezone

By default all jobs use Local timezone. You can use any timezone that implements chrono::Timezone.

Dependencies

~3–4MB
~65K SLoC