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 a cron schedule.
- Uses current
Tokio
runtime or creates new one with the specified type, number of threads and limited parallelism. - Allows task cancellation, getting current state and runtime statistics of the task.
- Task execution time may be limited.
- 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 a 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 shut down scheduler
// Wait for completion of all running jobs
scheduler.shutdown(ShutdownOpts::WaitForFinish).await
}
§Feature flags
tz
- enables cron schedules with timezone, seecron-lite
documentation for details.
Modules§
- job
- Contains primitive
JobId
which uniquely identifies executingTask
instance. - scheduler
Scheduler
is the most essential structure ofSACS
, its heart. This is an entry point to schedule tasks and control on tasks and on whole jobs runtime.- task
Task
object represents a single job with schedule. Use it to create workload of different types and post it toScheduler
.
Enums§
- Error
- Represents
SACS
specific errors.
Type Aliases§
- Result
- Convenient alias for
Result
.