Cron Expression Generator

Генерирует cron-выражения визуально с пошаговым конструктором

Быстрые предустановки

Минута

Час

День месяца

Месяц

День недели

Cron-выражение

0 9 * * *

minute hour day(month) month day(week)

Что такое генератор cron-выражений?

Генератор cron-выражений — это инструмент, который строит строки расписания cron через визуальный интерфейс, не требуя писать их вручную. Cron-выражения — это строки из пяти полей (минута, час, день месяца, месяц, день недели), определяющие, когда должна выполняться повторяющаяся задача. Формат восходит к оригинальному демону Unix cron 1979 года и сегодня используется в crontab, Kubernetes CronJobs, GitHub Actions, AWS EventBridge, Google Cloud Scheduler и десятках библиотек планирования задач.

Написание cron-выражений по памяти — распространённый источник ошибок. Пять полей взаимодействуют неочевидным образом: шаговое значение */15 в поле минут даёт запуски в 0, 15, 30 и 45, тогда как 5/15 начинается с минуты 5 и даёт 5, 20, 35, 50. Сочетание ограниченных полей дня месяца и дня недели создаёт условие ИЛИ, а не И, что удивляет даже опытных инженеров. Визуальный генератор устраняет эту неоднозначность: вы выбираете нужное расписание, а инструмент автоматически формирует правильный синтаксис.

Генератор cron отличается от парсера cron. Парсер принимает готовое выражение и объясняет его на понятном языке. Генератор работает в обратном направлении: вы описываете нужное расписание, а инструмент выдаёт соответствующую cron-строку. Используйте генератор при создании нового запланированного задания; используйте парсер при аудите или отладке существующих.

Зачем использовать этот генератор cron?

Написать cron-выражение вручную означает запоминать порядок полей, допустимые диапазоны и правила операторов. Одно неверно расставленное поле превращает ежедневное задание в задание, которое запускается каждую минуту. Этот генератор позволяет выбрать расписание визуально и скопировать результат одним кликом.

🖱️
Визуальный конструктор расписаний
Выбирайте значения минуты, часа, дня, месяца и дня недели из выпадающих списков и переключателей. Cron-выражение обновляется в реальном времени при изменении каждого поля. Никаких знаний синтаксиса не требуется.
🔒
Обработка без передачи данных
Вся генерация выполняется в вашем браузере. Данные расписания не отправляются на сервер. Ваши cron-выражения и конфигурации заданий остаются на вашем устройстве.
Мгновенный результат с предпросмотром
В процессе настройки вы видите сгенерированное cron-выражение и предпросмотр ближайших запланированных времён выполнения. Убедитесь в правильности расписания до того, как вставить его в конфигурацию.
📋
Без регистрации
Откройте страницу и сразу начните работу. Никакого входа в систему, API-ключа или установки. Работает на любом устройстве с современным браузером, включая мобильные.

Сценарии использования генератора cron

Frontend-разработчик
Создавайте cron-выражения для административных панелей и интерфейсов планирования. Генерируйте правильный синтаксис для пользовательских выборщиков расписания, которые хранят cron-строки в базе данных.
Backend-инженер
Создавайте cron-выражения для очередей задач — Celery, Sidekiq и Bull. Сформируйте строку расписания, проверьте ближайшие запуски и вставьте её в конфигурацию задания.
DevOps / SRE
Генерируйте расписания cron для Kubernetes CronJobs, CI/CD-пайплайнов и автоматизации инфраструктуры. Создавайте выражения для окон резервного копирования, обновления сертификатов и ротации логов без синтаксических ошибок.
QA-инженер
Создавайте тестовые cron-выражения, которые срабатывают через заданные интервалы для интеграционного тестирования. Генерируйте расписания с предсказуемыми временами выполнения для проверки поведения планировщика.
Инженер по данным
Создавайте cron-выражения для триггеров ETL-пайплайнов и расписаний синхронизации данных. Генерируйте непересекающиеся расписания для этапов извлечения, преобразования и загрузки с точной выверкой времени.
Студент / Новичок
Изучайте синтаксис cron, экспериментируя с визуальным конструктором. Изменяйте отдельные поля и наблюдайте, как меняются выражение и ближайшие времена выполнения. Вырабатывайте интуицию для работы с символами подстановки, диапазонами и шаговыми значениями.

Стандартные предустановки расписания cron

В таблице ниже перечислены cron-выражения для наиболее часто используемых расписаний. Большинство производственных заданий укладываются в один из этих шаблонов. Изменяйте отдельные поля в соответствии с реальными требованиями к времени.

РасписаниеВыражениеТипичное применение
Every minute* * * * *Health checks, queue polling
Every 5 minutes*/5 * * * *Metrics collection, cache refresh
Every 15 minutes*/15 * * * *API sync, dashboard updates
Every hour0 * * * *Log rotation, report generation
Every 6 hours0 */6 * * *Database backups, digest emails
Daily at midnight0 0 * * *Nightly batch jobs, cleanup scripts
Daily at 9 AM0 9 * * *Daily reports, notification digests
Weekdays at 9 AM0 9 * * 1-5Business-hours tasks, standup reminders
Every Monday at midnight0 0 * * 1Weekly reports, dependency updates
First of every month0 0 1 * *Billing runs, monthly aggregation
Every Sunday at 2:30 AM30 2 * * 0Full backups during low-traffic window
January 1st at midnight0 0 1 1 *Annual reports, license renewals

Структура cron-выражения

Каждое cron-выражение содержит ровно пять полей, читаемых слева направо. Каждое поле принимает определённые значения и операторы. Знания этих правил достаточно для написания любого расписания, которое встречается в производственной среде.

Схема пятипольного cron-выражения:
*min0-59
*hour0-23
*day1-31
*month1-12
*weekday0-6

Четыре оператора управляют сопоставлением значений внутри каждого поля. Их можно комбинировать: 1-5/2 в поле дня недели означает понедельник, среду, пятницу (диапазон 1-5, шаг 2).

ОператорСинтаксисПримерРезультат
Wildcard** (minute)Every minute
Lista,b,c1,15 (day)1st and 15th
Rangea-b9-17 (hour)9 AM through 5 PM
Step*/n*/10 (minute)Every 10 minutes
Range+Stepa-b/n10-30/5 (min)10, 15, 20, 25, 30

Примеры кода

Как создавать и регистрировать расписания cron в Node.js, Python, Go и bash:

JavaScript (Node.js)
import { CronJob } from 'cron';

// Build a cron expression: every weekday at 9:00 AM
const expression = '0 9 * * 1-5';

const job = new CronJob(expression, () => {
  console.log('Running weekday morning task');
});
job.start();

// Programmatic expression building
function buildCron({ minute = '*', hour = '*', dom = '*', month = '*', dow = '*' }) {
  return `${minute} ${hour} ${dom} ${month} ${dow}`;
}

const expr = buildCron({ minute: '0', hour: '*/6', dow: '1-5' });
console.log(expr); // → "0 */6 * * 1-5"
Python
from crontab import CronTab

# Create a new cron job for the current user
cron = CronTab(user=True)

# Build a job: run backup.py every day at 2:30 AM
job = cron.new(command='python3 /home/user/backup.py')
job.setall('30 2 * * *')

print(job)           # → 30 2 * * * python3 /home/user/backup.py
print(job.is_valid()) # → True

# Schedule every 15 minutes on weekdays
job2 = cron.new(command='/usr/bin/sync-data')
job2.minute.every(15)
job2.dow.during('MON', 'FRI')

cron.write()  # Save to user's crontab

# Verify next run time
from croniter import croniter
from datetime import datetime

it = croniter('30 2 * * *', datetime.now())
print(it.get_next(datetime))  # → next 2:30 AM timestamp
Go
package main

import (
    "fmt"
    "strings"
    "github.com/robfig/cron/v3"
)

// BuildCron constructs a 5-field cron expression from parts
func BuildCron(minute, hour, dom, month, dow string) string {
    fields := []string{minute, hour, dom, month, dow}
    return strings.Join(fields, " ")
}

func main() {
    // Generate: every weekday at 9 AM
    expr := BuildCron("0", "9", "*", "*", "1-5")
    fmt.Println(expr) // → 0 9 * * 1-5

    // Validate and schedule it
    c := cron.New()
    _, err := c.AddFunc(expr, func() {
        fmt.Println("Running scheduled task")
    })
    if err != nil {
        fmt.Printf("Invalid expression: %v\n", err)
        return
    }
    c.Start()
}
Bash (crontab)
# Open the crontab editor to add a new job
crontab -e

# Add a cron job without opening an editor:
# Run cleanup.sh every Sunday at 3 AM
(crontab -l 2>/dev/null; echo "0 3 * * 0 /home/user/cleanup.sh") | crontab -

# Generate and add a job: every 10 minutes, log disk usage
EXPR="*/10 * * * *"
CMD="df -h >> /var/log/disk-usage.log"
(crontab -l 2>/dev/null; echo "$EXPR $CMD") | crontab -

# Verify the job was added
crontab -l | tail -1
# → */10 * * * * df -h >> /var/log/disk-usage.log

# Remove all cron jobs (use with caution)
# crontab -r

Часто задаваемые вопросы

Каков правильный порядок полей в cron-выражении?
Стандартный пятипольный порядок: минута (0–59), час (0–23), день месяца (1–31), месяц (1–12), день недели (0–6, где 0 — воскресенье). Этот порядок определён POSIX и используется в crontab, Kubernetes, GitHub Actions и большинстве библиотек cron. Некоторые инструменты, например Quartz Scheduler, добавляют поле секунд в начало, делая выражение шестипольным, но пятипольный формат является универсальным стандартом.
Как сгенерировать cron-выражение для «каждых N минут»?
Используйте шаговый оператор в поле минут: */N. Для каждых 5 минут — */5 * * * *. Для каждых 15 минут — */15 * * * *. Шаговый оператор делит диапазон поля равномерно. Обратите внимание: */7 не даёт запуски ровно каждые 7 минут через границы часов; он даёт запуски в минуты 0, 7, 14, 21, 28, 35, 42, 49, 56, а затем сбрасывается до 0 в начале следующего часа.
Можно ли сгенерировать cron-выражение для последнего дня каждого месяца?
Стандартный POSIX cron не поддерживает оператор «последний день месяца». Запись 0 0 L * * не работает в crontab или Kubernetes CronJobs. Обходные пути: планировать задачу на 28–31 числа и добавить проверку в оболочке ([ $(date +%d -d tomorrow) -eq 01 ]), либо использовать расширенную реализацию cron, например Quartz, которая поддерживает модификатор L. AWS EventBridge также умеет указывать последний день напрямую.
В чём разница между генератором и парсером cron?
Генератор cron принимает ваши требования к расписанию (например, «каждый будний день в 9:00») и выдаёт правильное cron-выражение (0 9 * * 1-5). Парсер cron работает в обратном направлении: принимает готовое выражение и формирует его описание на понятном языке. Используйте генератор при создании новых расписаний; используйте парсер при проверке или отладке существующих.
Как избежать пересечения запусков cron-заданий?
Сам cron не предотвращает пересечение запусков. Если задание, запланированное каждую минуту, выполняется 90 секунд, два экземпляра будут работать одновременно. Для предотвращения используйте файл блокировки (flock в bash), распределённую блокировку (Redis, etcd) или встроенную политику параллелизма планировщика. Kubernetes CronJobs имеют поле concurrencyPolicy, которое можно установить в Forbid или Replace. В планировщиках уровня приложений, таких как Celery, используйте пул solo или блокировку на уровне задачи.
0 или 1 является первым днём недели в cron?
В POSIX cron 0 — воскресенье, 6 — суббота. И 0, и 7 обозначают воскресенье в большинстве реализаций. Quartz Scheduler использует другое соглашение: 1 — воскресенье, 7 — суббота. Если ваша система поддерживает именованные дни (SUN, MON, TUE), используйте их вместо числовых значений, чтобы избежать путаницы на разных платформах.
Как сгенерировать cron-выражение для конкретного часового пояса?
Традиционный crontab использует локальный часовой пояс системы. На некоторых системах можно задать переменную TZ в файле crontab (TZ=America/New_York). Kubernetes CronJobs поддерживают поле .spec.timeZone начиная с версии 1.25. AWS EventBridge и Google Cloud Scheduler позволяют задавать часовой пояс для каждого расписания. Всегда документируйте ожидаемый часовой пояс рядом с cron-выражением в конфигурации.