Crate async_job

source ·
Expand description

async_job: a simple async cron runner

Use the Job trait to create your cron job struct, pass it to the Runner and then start it via run() method. Runner will spawn new async task where it will start looping through the jobs and will run their handle method once the scheduled time is reached.

If your OS has enough threads to spare each job will get its own thread to execute, if not it will be executed in the same thread as the loop but will hold the loop until the job is finished.

Please look at the Job trait documentation for more information.

Example

use async_job::{Job, Runner, Schedule, async_trait};
use tokio::time::Duration;
use tokio;

struct ExampleJob;

#[async_trait]
impl Job for ExampleJob {
    fn schedule(&self) -> Option<Schedule> {
        Some("1/5 * * * * *".parse().unwrap())
    }
    async fn handle(&mut self) {
        println!("Hello, I am a cron job running at: {}", self.now());
    }
}

async fn run() {
    let mut runner = Runner::new();

    println!("Adding ExampleJob to the Runner");
    runner = runner.add(Box::new(ExampleJob));

    println!("Starting the Runner for 20 seconds");
    runner = runner.run().await;
    tokio::time::sleep(Duration::from_millis(20 * 1000)).await;

    println!("Stopping the Runner");
    runner.stop().await;
}

#[tokio::main]
async fn main() {
    run().await;
}

Output:

Adding ExampleJob to the Runner
Starting the Runner for 20 seconds
Hello, I am a cron job running at: 2021-01-31 03:06:25.908475 UTC
Hello, I am a cron job running at: 2021-01-31 03:06:30.912637 UTC
Hello, I am a cron job running at: 2021-01-31 03:06:35.926938 UTC
Hello, I am a cron job running at: 2021-01-31 03:06:40.962138 UTC
Stopping the Runner

Structs

  • Runner that will hold all the jobs and will start up the execution and eventually will stop it.
  • Singleton instance of a tracker that won’t allow same job to run again while its already running unless you specificly allow the job to run in parallel with itself
  • Struct for marking jobs running

Traits

  • A cron job that runs for a website.

Attribute Macros