# Scheduling: Cron, Intervals और Catchup — Apache Airflow: Data Pipelines का Orchestration

Source: https://www.geekswithgeeks.com/hi/airflow/dag-scheduling

> Schedule चुनें, data intervals समझें और तय करें कि पिछले runs की भरपाई करनी है या नहीं।

## Run उस interval के लिए है जो अभी ख़त्म हुआ

`schedule` को preset (`"@daily"`, `"@hourly"`), **cron** string (रोज़ 06:00 के लिए `"0 6 * * *"`) या `timedelta` पर रखें। Airflow **data intervals** में सोचता है: जिस दैनिक run की logical date 1 अक्टूबर है वह 1 अक्टूबर 00:00 से 2 अक्टूबर 00:00 को ढकता है और वास्तव में उस interval के ख़त्म होने **के बाद**, 2 अक्टूबर की आधी रात को, शुरू होता है। `start_date` वह समय है जब scheduling शुरू हो सकती है। **`catchup`** तय करता है कि `start_date` से चूके हर interval के लिए runs बनें (True) या सिर्फ़ ताज़ा (False)। `catchup=True` और दूर की `start_date` से सावधान रहें: यह एक साथ सैकड़ों runs बना सकता है।

## Interval और catchup का गणित, चलाकर

मैंने यह सादी Python गणना चलाई। 1 अक्टूबर की logical date वाला run 1 से 2 अक्टूबर को ढकता है और 2 अक्टूबर 00:00 पर चलता है। `start_date` 1 सितंबर और 1 अक्टूबर को `catchup=True` के साथ 30 दैनिक runs (1 से 30 सितंबर) बनेंगे।

```python
from datetime import datetime, timedelta, date

logical = datetime(2026, 10, 1)
end = logical + timedelta(days=1)
print("interval", logical.date(), "->", end.date(), "runs at/after", end.isoformat())

start, now = date(2026, 9, 1), date(2026, 10, 1)
runs = [start + timedelta(days=i) for i in range((now - start).days)]
print(len(runs), runs[0], runs[-1])
```

Output:

```
interval 2026-10-01 -> 2026-10-02 runs at/after 2026-10-02T00:00:00
30 2026-09-01 2026-09-30
```

## UTC उपयोग करें और स्पष्ट रहें

Airflow आंतरिक रूप से UTC में काम करता है। आपका व्यवसाय भारतीय मानक समय (UTC+5:30) में सोचता हो तो timezone-aware `start_date` से timezone जानबूझकर तय करें, और याद रखें कि 06:00 IST 00:30 UTC है।

**Quiz:** `catchup=False` क्या करता है?

- [ ] पुराने runs हटाता है
- [ ] DAG बंद करता है
- [x] चूके हर interval के लिए एक की जगह सिर्फ़ ताज़ा run बनाता है
- [ ] DAG दो बार चलाता है

*Answer:* चूके हर interval के लिए एक की जगह सिर्फ़ ताज़ा run बनाता है. Catchup के बिना Airflow start_date से हर interval backfill नहीं करता।
