Inquir Compute logoInquir Compute
Сценарий

Cron-задачи как пайплайны по расписанию, а не «магический» shell

Задачи по расписанию оформляются как триггеры пайплайна: те же функции и секреты, что у HTTP-маршрутов, единая история выполнений и настраиваемые повторы при сбоях.

Обновлено: 2026-04-20

Суть ответа

Cron-задачи как пайплайны по расписанию, а не «магический» shell. Один ID функции может питать HTTP-маршрут и шаг пайплайна по расписанию — без дублирования деревьев кода.

Когда подходит и когда нет

  • Ночной ETL
  • Ротация сертификатов/токенов
  • Периодический опрос интеграций

На что обратить внимание

  • Системные таймеры не чинят изоляцию зависимостей.
  • Хочется единой модели секретов и логов между фоновой задачей и API.

Почему «cron на своём сервере» часто даёт сюрпризы в эксплуатации

Если вывод заданий уходит лишь в почту root или в локальные логи без централизованного мониторинга, сбои могут длительно оставаться незамеченными.

Когда расписание живёт только на одной VPS, расхождение версий окружения и секретов, а также вопрос «кто и когда менял cron», почти неизбежно превращают каждый инцидент в ручной разбор по SSH.

Записи в crontab редко проходят тот же конвейер версионирования, что основной код: сложно восстановить, какая именно сборка выполнялась в запланированное время.

Параллельные запуски одних и тех же заданий без явных правил перекрытия и блокировок повышают риск порчи общего состояния — к расписаниям в пайплайне стоит относиться с той же аккуратностью, что и к обработчикам webhooks.

Почему только системные таймеры или cron на одной машине не закрывают изоляцию, секреты и единый журнал с HTTP API

Системные таймеры не чинят изоляцию зависимостей.

Хочется единой модели секретов и логов между фоновой задачей и API.

Как Inquir сводит HTTP API и задачи по расписанию в одну модель функций и пайплайнов

Один ID функции может питать HTTP-маршрут и шаг пайплайна по расписанию — без дублирования деревьев кода.

Cron проверяется при сохранении; планировщик помнит следующий запуск пайплайна — правки расписания переносятся аккуратно.

Что даёт платформа для cron-пайплайнов вместо ручного crontab на сервере

Проверка cron при сохранении

Некорректное выражение отклоняется при сохранении, а не «внезапно» в проде.

Шаг планировщика и перекрытия

Нагрузка минутного масштаба; для длинных задач — пропуск при уже идущем запуске и явные правила перекрытия.

История запусков

Видно, отработала ли задача, без поиска по логам на сервере.

Оповещения

Подключите мониторинг к доле ошибок или к SLA по длительности выполнения.

Как перенести cron на пайплайны Inquir с расписанием

Сначала перенесите логику в версионируемый обработчик функции и проверьте его ручными вызовами, затем подключите триггер расписания (schedule) с корректным cron-выражением.

1

Вынести логику из shell

Перенесите сценарий в версионируемый обработчик с предсказуемым окружением.

2

Проверка вручную

Запускайте функцию из консоли до тех пор, пока результат не совпадёт с ожиданием для типичных входных данных.

3

Расписание

Триггер типа schedule и валидная cron-строка в API/UI.

Типовые паттерны cron-задач

Два распространённых паттерна: инкрементальная синхронизация с курсором (безопасно повторять) и генерация отчёта с веерной рассылкой.

jobs/incremental-sync.mjs (watermark pattern)
export async function handler(event) {
  // Read cursor from env so re-runs do not re-process old records
  const since = process.env.SYNC_CURSOR ?? new Date(Date.now() - 86_400_000).toISOString();
  const records = await source.fetchUpdatedSince(since);
  await destination.upsertBatch(records); // idempotent by record ID
  const newCursor = records.at(-1)?.updatedAt ?? since;
  // Update cursor in your config/store for next run
  return { synced: records.length, cursor: newCursor };
}
jobs/nightly-report.mjs (report + fan-out)
export async function handler(event) {
  const rows = await buildReport();
  await storage.upload(rows, { key: `reports/${new Date().toISOString().slice(0, 10)}.csv` });
  // Fan out — each recipient gets a separate pipeline step
  await Promise.all(
    recipients.map((r) => global.durable.startNew('send-report', undefined, { recipientId: r.id, rowCount: rows.length })),
  );
  return { rows: rows.length, notified: recipients.length };
}

Когда имеет смысл cron-пайплайны на Inquir вместо задач только на своём сервере

Когда это уместно

  • Ночной ETL
  • Ротация сертификатов/токенов
  • Периодический опрос интеграций

Когда лучше не трогать

  • Субсекундные периодические задачи — сверяйтесь с таймерами платформы

Вопросы и ответы

Запуск длиннее интервала?

Идемпотентность, локи или skip-if-running внутри хендлера, чтобы перекрытия не портили состояние.

Чем лучше crontab на одной машине?

Версионируемые бандлы, изоляция контейнера, записи вызовов и те же секреты, что у HTTP — плюс графы шагов.

Часовой пояс cron?

Зафиксируйте ожидание команды (часто UTC); учитывайте DST для бизнес-часов.

Inquir Compute logoInquir Compute

Самый простой способ запускать AI-агентов и фоновые задачи без собственной инфраструктуры.

Связаться info@inquir.org

Привет, это команда Inquir Compute. Спроси AI о продукте:

© 2025 Inquir Compute. Все права защищены.