Ответ
Cron — это стандартный демон-планировщик задач в Unix-подобных системах. Airflow — это полноценная платформа для программного создания, планирования и мониторинга сложных потоков задач (workflows).
Основное различие заключается в масштабе и возможностях.
| Характеристика | Cron | Airflow |
|---|---|---|
| Основная задача | Выполнение команд по простому расписанию | Оркестрация сложных потоков задач (DAGs) |
| Зависимости | Не поддерживает. Задачи независимы. | Ключевая функция. Задачи могут зависеть друг от друга. |
| Мониторинг | Отсутствует (только логирование в системные файлы) | Продвинутый Web UI с визуализацией, логами, статистикой. |
| Масштабируемость | Ограничена одной машиной | Горизонтально масштабируемая архитектура (workers, scheduler). |
| Повторный запуск | Только вручную | Автоматический повторный запуск упавших задач. |
| Конфигурация | Простой текстовый файл (crontab) |
Задачи описываются как код на Python (DAGs). |
Когда что использовать?
-
Cron идеально подходит для простых, изолированных и повторяющихся задач на одном сервере. Например, запуск скрипта для резервного копирования раз в сутки.
# Запускать скрипт backup.sh каждый день в 03:00 0 3 * * * /home/user/scripts/backup.sh -
Airflow необходим для построения сложных ETL/ELT-пайплайнов, где задачи зависят друг от друга, требуют мониторинга, логирования и могут выполняться распределенно.
# Пример DAG в Airflow from airflow.operators.bash import BashOperator with DAG(dag_id='data_pipeline', schedule_interval='@daily') as dag: extract_data = BashOperator(task_id='extract', bash_command='... ') transform_data = BashOperator(task_id='transform', bash_command='...') load_data = BashOperator(task_id='load', bash_command='...') # Определение зависимостей extract_data >> transform_data >> load_data
Вывод: Cron — это таймер, Airflow — это дирижёр для оркестра.
Ответ 18+ 🔞
Давай разберёмся, что у нас тут за зверь такой — Крон и Эйрфлоу. Представь, что ты живёшь в коммуналке.
Крон — это твой сосед-старичок, который как часы. Каждый день в 6 утра он бухает чайник, в 7 выходит на балкон и материт голубей, а в 23:00 тушит свет. Он делает своё дело чётко, по расписанию, и ему похуй на всё остальное. Никаких сложностей: проснулся — налил кипятку — обосрал птиц — спать. Всё.
# Ровно в 5 утра каждый день пнуть кота
0 5 * * * /home/petrovich/kick_the_cat.sh
А теперь Эйрфлоу — это, блядь, целый штаб управления полётами. Ты не просто чайник кипятишь. Ты строишь целую цепочку: сначала надо воду из колодца достать, потом дров нарубить, потом растопить печь, и только потом, если первые три задачи не сдохли, можно чайник ставить. И если на этапе "наруби дров" топор сломался — система это увидит, запишет в лог, отправит уведомление "Петрович, топор накрылся" и попробует запустить задачу "починить топор" перед тем, как снова пытаться дрова колоть.
# Пример DAG в Airflow
from airflow.operators.bash import BashOperator
with DAG(dag_id='утренний_ад', schedule_interval='@daily') as dag:
достать_воду = BashOperator(task_id='достать_воду', bash_command='...')
нарубить_дров = BashOperator(task_id='нарубить_дров', bash_command='...')
растопить_печь = BashOperator(task_id='растопить_печь', bash_command='...')
вскипятить_чай = BashOperator(task_id='вскипятить_чай', bash_command='...')
# Вот эта магия — что за чем идёт
достать_воду >> нарубить_дров >> растопить_печь >> вскипятить_чай
Короче, ёпта, табличка для наглядности:
| Критерий | Cron (Старичок-часовщик) | Airflow (Штаб управления) |
|---|---|---|
| Суть | Выполнил команду — пошёл нахуй. | Создай, запланируй, следи, перезапускай, отчитывайся. |
| Зависимости задач | Не, не слышал. Каждая задача сама по себе, как бомж в подъезде. | Основа основ. Задачи ждут друг друга, как дураки автобуса. |
| Глянуть, что творится | Полез в логи, ебать, глаза сломаешь. | Красивый веб-интерфейс, где всё видно: что летает, что ползает, что сдохло. |
| Масштаб | Одна машина. Всё на ней и умрёт. | Армия воркеров, отдельный шедулер — можно раскидать задачи по всему кластеру. |
| Упала задача? | Упала и хуй с ней. Узнаешь, когда всё уже горит. | Сам увидит, попробует перезапустить, напишет письмо твоему начальнику. |
| Как настроить | Открыл crontab, написал строчку. |
Пишешь целую программу на Python, описываешь весь пайплайн. |
Так когда что брать?
- Берёшь Cron, когда тебе нужно что-то простое и тупое делать раз в N времени. Скачать файлик, почистить логи, отправить напоминалку. "Разбуди меня в 7 утра" — вот это его уровень.
- Берёшь Airflow, когда у тебя не задача, а целое приключение. Сначала вытащи данные из десяти разных источников, потом склей их, потом преобразуй, потом засунь в базу, потом пошли отчёт, а если на третьем шаге ошибка — откати всё назад и начни сначала. Это уже не "разбуди", а "разбуди, приготовь завтрак, одень и проводи до метро".
Вывод, блядь, простой: Cron — это таймер на кухонной плите. Airflow — это автоматизированный конвейер на заводе, где роботы друг другу передают детали. Если тебе яйцо всмятку сварить — хватит и таймера. Если тебе нужно собрать космический корабль — без конвейера с контролем качества ты просто обосрёшься на втором же винтике.