Rust如何实现定时任务调度

在Rust中如何实现定时任务调度?有什么推荐的库或框架可以使用吗?我希望能够定期执行某些任务,比如每隔几分钟或每天固定时间运行一次。最好能提供简单的代码示例或实现思路,谢谢!

2 回复

Rust中可通过以下方式实现定时任务调度:

  1. 使用tokio::time::interval配合async/await
  2. 使用crate如tokio-cron-scheduler、job_scheduler
  3. 结合std::thread::sleep实现简单轮询

示例:

use tokio::time::{interval, Duration};

#[tokio::main]
async fn main() {
    let mut interval = interval(Duration::from_secs(5));
    loop {
        interval.tick().await;
        println!("执行定时任务");
    }
}

推荐使用tokio生态的异步方案,性能更好。


在 Rust 中实现定时任务调度,主要有以下几种方法:

1. 使用 tokiotokio_cron_scheduler 库(推荐用于异步应用)

适合异步运行时环境,功能强大且易用。

示例代码:

use tokio_cron_scheduler::{Job, JobScheduler};
use std::time::Duration;

#[tokio::main]
async fn main() {
    let mut sched = JobScheduler::new();
    
    // 添加每5秒执行的任务
    sched.add(Job::new("0/5 * * * * *", |_uuid, _l| {
        println!("定时任务执行 - 每5秒");
    }).unwrap()).await.unwrap();
    
    // 启动调度器
    sched.start().await.unwrap();
    
    // 保持程序运行
    loop {
        tokio::time::sleep(Duration::from_secs(60)).await;
    }
}

依赖配置(Cargo.toml):

[dependencies]
tokio = { version = "1.0", features = ["full"] }
tokio-cron-scheduler = "0.8"

2. 使用 schedule

适合简单的同步任务调度。

示例代码:

use schedule::{Agenda, Job};
use std::time::Duration;
use std::thread;

fn main() {
    let mut agenda = Agenda::new();
    
    // 添加每10秒执行的任务
    agenda.add(Job::new(|| println!("定时任务执行"), "0/10 * * * * *").unwrap());
    
    loop {
        agenda.run_pending();
        thread::sleep(Duration::from_secs(1));
    }
}

依赖配置:

[dependencies]
schedule = "0.4"

3. 使用 tokio 的定时器

适合简单的周期性异步任务。

示例代码:

use tokio::time::{interval, Duration};

#[tokio::main]
async fn main() {
    let mut interval = interval(Duration::from_secs(5));
    
    loop {
        interval.tick().await;
        println!("定时任务执行 - 每5秒");
    }
}

选择建议:

  • 异步应用:推荐使用 tokio-cron-scheduler,支持完整的 cron 表达式
  • 简单同步任务:使用 schedule
  • 基础定时:直接使用 tokio::time::interval

这些方法都能有效实现 Rust 中的定时任务调度,根据具体需求选择合适的方案即可。

回到顶部