Crate sacs

source ·
Expand description

§SACS - Simple Asynchronous Cron Scheduler

SACS is easy to use, lightweight scheduler and executor of repeatable async tasks for Tokio runtime.

§Features

  • Runs tasks with different types of schedule: once, with delay, by interval, with cron schedule.
  • Uses current Tokio runtime or creates new one with specified type, number of threads and limited parallelism.
  • Allows task cancellation and getting current state of task.
  • Lightweight, small, easy to use.

§Quick start

Just create Scheduler and add Task to it. Refer to scheduler and task modules documentation for more examples and details of possible usage.

use sacs::{
    scheduler::{Scheduler, ShutdownOpts, TaskScheduler},
    task::{CronOpts, Task, TaskSchedule},
    Result,
};
use std::time::Duration;
use tracing::info;

#[tokio::main]
async fn main() -> Result<()> {
    tracing_subscriber::fmt::init();

    // Create scheduler with default config
    let scheduler = Scheduler::default();

    // Create task with cron schedule: repeat it every 3 seconds
    let cron = TaskSchedule::Cron("*/3 * * * * *".try_into()?, CronOpts::default());
    let task = Task::new(cron, |id| {
        Box::pin(async move {
            info!("Job {id} started.");
            // Actual async workload here
            tokio::time::sleep(Duration::from_secs(2)).await;
            // ...
            info!("Job {id} finished.");
        })
    });

    // Post task to the scheduler and forget it :)
    let _task_id = scheduler.add(task).await?;

    // ... and do any other async work in parallel
    tokio::time::sleep(Duration::from_secs(10)).await;

    // It's not mandatory but good to shutdown scheduler
    // Wait for completion of all running jobs
    scheduler.shutdown(ShutdownOpts::WaitForFinish).await
}

Modules§

  • Contains primitive JobId which uniquely identifies executing Task instance.
  • Scheduler is the most essential structure of SACS, it’s heart. This is an entry point to schedule tasks and control on tasks and on whole jobs runtime.
  • Task object represents single job with schedule. Use it to create workload of different types and post it to Scheduler.

Enums§

  • Represents SACS specific errors.

Type Aliases§

  • Convenient alias for Result.