Как пользоваться: Генератор cron-выражений
- Выберите типовое расписание или используйте Создать расписание, чтобы указать периодичность, дни недели и время, затем нажмите Использовать это расписание.
- Или вставьте готовое выражение, например
30 2 * * 1, в поле Cron-выражение. Описание простыми словами обновляется по мере ввода. - Точно настройте отдельные части в блоке Редактировать поля (минута, час, день месяца, месяц, день недели).
- Проверьте список Время следующих запусков в местном времени или UTC, затем скопируйте выражение в crontab, CI-workflow или планировщик.
Что такое cron-выражение?
Cron-выражение — это компактное расписание из пяти полей, разделённых пробелами. Оно сообщает демону Unix cron и инструментам на том же синтаксисе, например GitHub Actions, GitLab CI, Kubernetes CronJobs, Vercel и многим очередям задач, когда запускать задачу. Этот генератор позволяет собрать выражение из выпадающих списков, объясняет любое выражение простым языком с помощью открытой библиотеки cRonstrue и вычисляет ближайшие запуски, чтобы вы могли проверить расписание до его запуска в работу.
Пять полей
┌──────── minute (0–59)
│ ┌────── hour (0–23)
│ │ ┌──── day of month (1–31)
│ │ │ ┌── month (1–12, JAN–DEC)
│ │ │ │ ┌ day of week (0–6, SUN–SAT)
│ │ │ │ │
* * * * * command
В поле дня недели 7 тоже означает воскресенье.
Каждое поле принимает * (любое значение), одно число, диапазон 1-5, список 1,15,30, шаг */10 или диапазон с шагом 9-17/2. Некоторые планировщики (Quartz, Spring, AWS EventBridge) добавляют первое поле — секунды. Отметьте «Поле секунд», чтобы работать с 6-частными выражениями.
Примеры
| Выражение | Значение |
|---|---|
*/5 * * * * | Каждые 5 минут |
0 * * * * | В начале каждого часа |
30 2 * * * | Каждый день в 02:30 |
0 9 * * 1-5 | В 09:00 по будням |
0 0 1 * * | В полночь 1-го числа каждого месяца |
0 0 1 */3 * | В полночь первого дня каждого квартала |
15 14 1 * * | В 14:15 1-го числа каждого месяца |
Частые ошибки
- День месяца и день недели. Если ограничены оба поля, классический cron запускает задачу, когда совпадает любое из них.
0 0 13 * 5означает «каждое 13-е число и каждую пятницу», а не «пятницу 13-го». Список следующих запусков следует этому правилу. - Забытая минута.
* 9 * * *запускается 60 раз с 09:00 до 09:59. Используйте0 9 * * *, чтобы задача запускалась один раз. - Часовые пояса. Cron использует часовой пояс сервера, а GitHub Actions и большинство облачных планировщиков работают в UTC. Переключите список запусков на UTC для сравнения.
- Неравномерные шаги.
*/45в поле минут срабатывает в :00 и :45, затем снова в :00. Шаги начинаются заново каждый час и не переносятся. - Номера дней в Quartz. Quartz считает воскресенье единицей, а Unix cron использует 0 (или 7). Этот инструмент использует нумерацию Unix.
Нестандартные расширения
L в поле дня месяца (последний день месяца), 5L (последняя пятница) и 1#2 (второй понедельник) поддерживаются Quartz и некоторыми реализациями cron, но не Vixie cron в Linux. Здесь они объясняются и показываются в предпросмотре, но проверьте, принимает ли их ваш планировщик. Нужно перевести время запуска в epoch-значение? Попробуйте Конвертер Unix-времени или Конвертер часовых поясов.
Также ищут как: crontab, cron job.
Инструменты, которые хорошо сочетаются с Генератор cron-выражений
- Генератор systemd service — Запускайте приложение как полноценный сервис Linux, который стартует при загрузке и перезапускается после сбоя.
- Калькулятор разницы дат — Считайте дни между двумя датами, включая рабочие дни и разбивку на годы, месяцы и дни.
- Тестер регулярных выражений — Введите шаблон и смотрите, как совпадения подсвечиваются прямо в тестовом тексте.
- HTML форматер — Вставьте минифицированную или неаккуратную разметку и получите чистый HTML с единообразными отступами, включая встроенные блоки <style> и <script>.
Часто задаваемые вопросы
Что означает */15 в cron?
*/15 в поле минут означает каждую 15-ю минуту, начиная с 0, то есть :00, :15, :30 и :45. Выражение 5-50/15 даст :05, :20, :35 и :50.Как запускать cron-задачу каждые 30 секунд?
*/30 * * * * *), или добавьте в crontab две строки, где вторая начинается с sleep 30;.Время cron в UTC или в местном часовом поясе?
CRON_TZ). GitHub Actions, Kubernetes (по умолчанию) и большинство облачных планировщиков вычисляют выражения в UTC. Список запусков здесь может показывать любой из вариантов.В чём разница между @daily и 0 0 * * *?
@daily (или @midnight) — это сокращение для 0 0 * * *. Аналогично @hourly = 0 * * * *, @weekly = 0 0 * * 0, @monthly = 0 0 1 * * и @yearly = 0 0 1 1 *.Как запланировать задачу на последний день месяца?
L, если ваш планировщик его поддерживает (0 0 L * *), либо запускайте задачу ежедневно с 28 по 31 число и проверяйте дату в самой команде: 0 0 28-31 * * [ "$(date -d tomorrow +\%d)" = "01" ] && ./job.sh.Почему моё выражение никогда не запускается?
0 0 31 2 * (31 февраля) или 0 0 31 4 * (31 апреля), никогда не совпадают. Список следующих запусков покажет предупреждение, если в ближайшие десять лет запуск не найден.