使用clokwerk在Rust中配置定时任务无效,求助排查问题
问题原因及解决办法
你的代码只完成了任务定义,却没有启动调度器的执行逻辑——程序运行到main函数末尾就直接退出了,根本没机会触发定时任务。
clokwerk的Scheduler不会自动后台运行,必须显式让它进入执行循环。下面是两种可行的修改方案:
方案1:使用官方阻塞运行方法(推荐)
改用blocking模块的Scheduler,调用blocking_run()让程序持续运行并执行任务:
use clokwerk::{blocking::Scheduler, TimeUnits}; fn main() { let mut scheduler = Scheduler::with_tz(chrono::Utc); scheduler .every(10.seconds()) .run(|| println!("Periodic task")); // 阻塞当前线程,持续执行调度任务 scheduler.blocking_run(); }
方案2:手动实现执行循环
如果需要自定义循环逻辑(比如加入退出条件),可以手动调用run_pending()并配合sleep:
use clokwerk::{Scheduler, TimeUnits}; use std::thread; use std::time::Duration; fn main() { let mut scheduler = Scheduler::with_tz(chrono::Utc); scheduler .every(10.seconds()) .run(|| println!("Periodic task")); // 无限循环检查并执行待处理任务 loop { scheduler.run_pending(); // 每隔100ms检查一次,避免占用过多CPU thread::sleep(Duration::from_millis(100)); } }
两种方案都能让定时任务按预期每10秒输出内容。
内容的提问来源于stack exchange,提问作者Ifeanyi Nwachi
相关产品推荐
相关产品推荐

