# 后台服务

URL: https://caijiao.org/pingora/background_service
Source: docs/pingora/background_service.md
Description: 学习如何在 Pingora 中配置和运行后台服务，包括定时任务、异步执行和守护进程管理。

Pingora 支持 **后台服务（Background Service）**，用于执行长期运行的任务，如监控、日志收集和定时作业。

## 特性

- 与主代理服务并行运行  
- 使用异步运行时执行任务  
- 可与上下文（CTX）和过滤器配合使用  

## 创建后台任务

```rust
use tokio::time::{sleep, Duration};

async fn background_task() {
    loop {
        println!("后台任务运行中...");
        sleep(Duration::from_secs(10)).await;
    }
}

#[tokio::main]
async fn main() {
    tokio::spawn(background_task()); // 启动后台任务
    let server = Server::new(None).unwrap();
    server.bootstrap();

    let app = http_proxy_service(None);
    server.run_forever(app).unwrap();
}
````

- `tokio::spawn` 用于启动独立的异步任务
- 后台任务可执行日志记录、数据同步或监控指标更新

## 定时任务示例

```rust
use tokio::time::{interval, Duration};

async fn scheduled_task() {
    let mut interval = interval(Duration::from_secs(60));
    loop {
        interval.tick().await;
        println!("每分钟执行一次的任务");
    }
}
```

- 使用 `interval` 实现周期性执行
- 适合定时健康检查或定期数据处理

## 与主服务集成

- 后台任务不会阻塞主代理服务
- 可通过 CTX 或共享数据与请求处理逻辑通信
- 支持错误捕获与重试机制，保证任务稳定运行

---

通过后台服务，Pingora 可以在保持高性能请求处理的同时，运行长期任务，实现监控、日志和定时作业等功能。
