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