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-выражения для наиболее часто используемых расписаний. Большинство производственных заданий укладываются в один из этих шаблонов. Изменяйте отдельные поля в соответствии с реальными требованиями к времени.
| Расписание | Выражение | Типичное применение |
|---|---|---|
| Every minute | * * * * * | Health checks, queue polling |
| Every 5 minutes | */5 * * * * | Metrics collection, cache refresh |
| Every 15 minutes | */15 * * * * | API sync, dashboard updates |
| Every hour | 0 * * * * | Log rotation, report generation |
| Every 6 hours | 0 */6 * * * | Database backups, digest emails |
| Daily at midnight | 0 0 * * * | Nightly batch jobs, cleanup scripts |
| Daily at 9 AM | 0 9 * * * | Daily reports, notification digests |
| Weekdays at 9 AM | 0 9 * * 1-5 | Business-hours tasks, standup reminders |
| Every Monday at midnight | 0 0 * * 1 | Weekly reports, dependency updates |
| First of every month | 0 0 1 * * | Billing runs, monthly aggregation |
| Every Sunday at 2:30 AM | 30 2 * * 0 | Full backups during low-traffic window |
| January 1st at midnight | 0 0 1 1 * | Annual reports, license renewals |
Структура cron-выражения
Каждое cron-выражение содержит ровно пять полей, читаемых слева направо. Каждое поле принимает определённые значения и операторы. Знания этих правил достаточно для написания любого расписания, которое встречается в производственной среде.
Четыре оператора управляют сопоставлением значений внутри каждого поля. Их можно комбинировать: 1-5/2 в поле дня недели означает понедельник, среду, пятницу (диапазон 1-5, шаг 2).
| Оператор | Синтаксис | Пример | Результат |
|---|---|---|---|
| Wildcard | * | * (minute) | Every minute |
| List | a,b,c | 1,15 (day) | 1st and 15th |
| Range | a-b | 9-17 (hour) | 9 AM through 5 PM |
| Step | */n | */10 (minute) | Every 10 minutes |
| Range+Step | a-b/n | 10-30/5 (min) | 10, 15, 20, 25, 30 |
Примеры кода
Как создавать и регистрировать расписания cron в Node.js, Python, Go и bash:
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"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 timestamppackage 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()
}# 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