Cron-задачи как пайплайны по расписанию, а не «магический» shell
Cron на триггере пайплайна — те же функции, что и у HTTP, одна история запусков.
Нагрузка и где ломается
Где гниёт crontab
Почта root отключена — задачи падают молча. Скрипты живут на одной машине, не в git, никто не знает версию «прошлой ночью».
Пересекающиеся задачи наступают на файлы; новички узнают расписание только у «старожила».
Параллельные запуски без ограничений портят общее состояние: без явных правил «не наступать друг на друга» легко получить порчу данных.
Overlapping runs corrupt shared state without skip-if-running guards—scheduled pipelines need the same rigor as webhook processors.
Где костыли не спасают
Почему одних таймеров мало
Системные таймеры не чинят изоляцию зависимостей.
Хочется единой модели секретов и логов между фоновой задачей и API.
Как помогает Inquir
Одна платформа
Один ID функции может питать HTTP-маршрут и шаг пайплайна по расписанию — без дублирования деревьев кода.
Cron проверяется при сохранении; планировщик помнит следующий запуск пайплайна — правки расписания переносятся аккуратно.
Что получаете
Примитивы
Проверка cron при сохранении
Некорректное выражение отклоняется при сохранении, а не «внезапно» в проде.
Шаг планировщика и перекрытия
Нагрузка минутного масштаба; для длинных задач — пропуск при уже идущем запуске и явные правила перекрытия.
История запусков
Видно, отработала ли задача, без поиска по логам на сервере.
Оповещения
Подключите мониторинг к доле ошибок или к SLA по длительности выполнения.
Что делать дальше
Как перенести cron на пайплайны Inquir с расписанием
Оформите хендлер, проверьте вызовы, затем триггер schedule с валидным cron.
Кодифицировать
Перенесите логику из shell в типизированный хендлер.
Тест
Ручные вызовы до совпадения выходов с ожиданием.
Расписание
Триггер типа schedule и валидная cron-строка в API/UI.
Пример кода
Каркас задачи
По расписанию хендлер получает метаданные пайплайна в событии. Возвращайте JSON для логов и следующих шагов.
export async function handler(event) { const rows = await buildReport(); await upload(rows); return { rows: rows.length }; }
Когда подходит
Выбирайте, когда…
Когда это уместно
- Ночной ETL
- Ротация сертификатов/токенов
- Периодический опрос интеграций
Когда лучше не трогать
- Субсекундные периодические задачи — сверяйтесь с таймерами платформы
FAQ
Вопросы и ответы
Запуск длиннее интервала?
Идемпотентность, локи или skip-if-running внутри хендлера, чтобы перекрытия не портили состояние.
Чем лучше crontab на одной машине?
Версионируемые бандлы, изоляция контейнера, записи вызовов и те же секреты, что у HTTP — плюс графы шагов.
Часовой пояс cron?
Зафиксируйте ожидание команды (часто UTC); учитывайте DST для бизнес-часов.