Skip to main content

yggdrasil/tasks/
mod.rs

1//! 后台任务调度入口。
2//!
3//! 所有任务仅在 `server` feature 启用时编译,运行在服务端独立的 tokio 任务中。
4
5#[cfg(feature = "server")]
6use std::future::Future;
7
8/// 派生常驻后台任务;任务 panic 时记录日志并终止进程。
9///
10/// 服务端是 panic=unwind,panic 只会结束所在的 tokio 任务。请求任务这样正合适,
11/// 但常驻任务(清理、备份、跨实例缓存同步等)静默退出后没有任何信号,
12/// 所以让进程退出,由容器重启恢复。任务正常返回(如配置缺失时提前退出)不受影响。
13#[cfg(feature = "server")]
14pub fn spawn_supervised(name: &'static str, task: impl Future<Output = ()> + Send + 'static) {
15    let handle = tokio::spawn(task);
16    tokio::spawn(async move {
17        if let Err(error) = handle.await {
18            if error.is_panic() {
19                tracing::error!(task = name, "后台任务 panic,终止进程以便重启");
20                std::process::abort();
21            }
22        }
23    });
24}
25
26/// 每天定时自动备份数据库与 uploads 素材,含自动轮转。
27#[cfg(feature = "server")]
28pub mod backup;
29/// 跨节点内容缓存失效通知与断线补偿。
30#[cfg(feature = "server")]
31pub mod cache_sync;
32/// 内容变更与启动后清除 EdgeOne 节点上缓存的公开页 HTML。
33#[cfg(feature = "server")]
34pub mod edge_purge;
35/// 定时清理图片磁盘缓存,避免缓存目录无限增长。
36#[cfg(feature = "server")]
37pub mod image_cache_cleanup;
38/// 定时清理评论过期的 IP 与用户代理信息,满足隐私保护要求。
39#[cfg(feature = "server")]
40pub mod ip_purge;
41/// 运行日志保留策略裁剪(龄期 + 行数上限),每小时执行。
42#[cfg(feature = "server")]
43pub mod log_purge;
44/// tracing 捕获日志的攒批落库 writer(capture mpsc → logs 表)。
45#[cfg(feature = "server")]
46pub mod log_writer;
47/// 定时物理删除无引用的孤儿素材(评论区匿名传图的主要回收手段)。
48#[cfg(feature = "server")]
49pub mod orphan_asset_purge;
50/// 定时清理回收站中超过保留期的已删除文章。
51#[cfg(feature = "server")]
52pub mod post_purge;
53/// 定时删除已过期会话,避免 `sessions` 表无限增长。
54#[cfg(feature = "server")]
55pub mod session_cleanup;
56/// sysinfo 主机指标(CPU/内存/磁盘)后台采样,server function 只读快照。
57#[cfg(feature = "server")]
58pub mod sysinfo_sampler;